• C++初阶学习第三弹——类与对象(上)——初始类与对象


    前言:

    在前面,我们已经初步学习了C++的一些基本语法,比如内敛函数、函数重载、缺省参数、引用等等,接下来我们就将正式步入C++的神圣殿堂,首先,先给你找个对象

    目录

    一、类与对象是什么?

    二、类的各部分组成

    1、类的定义

    2、类的访问限定符及封装

    3、类的作用域

    4、类的大小的计算


    一、类与对象是什么?

    在之前,我们也经常讲,说C语言是面向过程的,而C++是面向对象的,那这到底又有什么区别呢,我们可以看这样一个例子:

    就拿盖房子而言:

    面向过程其实就是一步步将房子盖起来,从打地基到垒墙再到封顶的整个过程应该如何去实现

    而面向对象则是将盖房子所需要的东西找出来即可,比如人、水泥、砖块等等

    鉴于C++面向对象的特点,于是就创建出类这个概念来处理每个对象,我们可以通过类来描述每个对象的全部特点

    二、类的各部分组成

    1、类的定义

    C++中的类与C语言中的结构体是十分相似的,都是将一些数据定义在一起,使得他们具有联系,

    C++中的类是由structclass引入的,他们的用法如下:(后面会做解释)

    struct:

    1. struct Std
    2. {
    3. int a;
    4. char b;
    5. void Init()
    6. {
    7. a = 0;
    8. b = '0';
    9. }
    10. };

    class:

    1. class A
    2. {
    3. public:
    4. void Init()
    5. {
    6. a = 0;
    7. size = 0;
    8. }
    9. private:
    10. int a;
    11. int size;
    12. };

    通过上面这两个举例,我们可以看出,C++中对类的引用,相较于C语言结构体,最大的不同就是在于可以定义函数,并且有访问限定符的运用

    下面我们就先来讲解一下这些细则

    2、类的访问限定符及封装

    通过上面的,我们可以观察到,在class的举例中有publicprivate,这两个东西其实就是C++类中的访问限定符,这样的访问限定符有三个:public、private、protected

    其中公有和保护私有的区别就是能否被外界直接访问,例如这样一个程序

    1. class A
    2. {
    3. public:
    4. void Init()
    5. {
    6. a = 0;
    7. size = 0;
    8. }
    9. void Add()
    10. {
    11. }
    12. private:
    13. int a;
    14. int size;
    15. };
    16. int main()
    17. {
    18. A a;
    19. return 0;
    20. }

    我们创建了一个名字为a的类对象,在类中我们在pubic中定义了两个函数,在private中定义了两个整形变量,现在我们通过类外定义的这个类对象a去访问类中元素,看会有什么有趣的事情发生

    当我们访问时,我们可以发现我们只能访问到public中的两个函数,而对于private中的两个整形变量则访问不到,这其实是因为private中的变量是受保护的,只能在类中进行访问,外界要想直接访问是做不到的

    这样的设计给了我们极大的操作空间,这样对于一个对象的属性,我们就可以通过操作,把我们想让别人知道的"public"出来,而不想让别人知道的就可以放在"private"或"protected"中

    注意事项:

    1、privateprotected区别不大,大部分情况下可以换着用,不同之处等以后学到再讲

    2、struct默认类中变量是public

    3、class默认类中变量是private

    3、类的作用域

    类定义了一个新的作用域 ,类的所有成员都在类的作用域中 在类体外定义成员时,需要使用 ::
    作用域操作符指明成员属于哪个类域。
    1. class Person
    2. {
    3. public:
    4. void PrintPersonInfo();
    5. private:
    6. char _name[20];
    7. char _gender[3];
    8. int  _age;
    9. };
    10. // 这里需要指定PrintPersonInfo是属于Person这个类域
    11. void Person::PrintPersonInfo()
    12. {
    13. cout << _name << " "<< _gender << " " << _age << endl;
    14. }

    4、类的大小的计算

    类在计算大小的时候,是不计算函数大小的

    例如:

    1. class A
    2. {
    3. public:
    4. void Init()
    5. {
    6. a = 0;
    7. size = 0;
    8. }
    9. void Add()
    10. {
    11. }
    12. private:
    13. int a;
    14. int size;
    15. };
    16. int main()
    17. {
    18. cout << sizeof(A) << endl;
    19. return 0;
    20. }

    运行结果:

    没有计算函数的大小
  • 相关阅读:
    (附源码)springboot 学生选课系统 毕业设计 612555
    Dubbo+Zookeeper入门实例
    基于双目相机拍摄图像的深度信息提取和目标测距matlab仿真
    设计模式-状态模式 golang实现
    Elasticsearch 基于地理位置的搜索查询
    977. 有序数组的平方
    1000粉!使用Three.js实现一个创意纪念页面 🏆
    js之循环
    TLS版本及CipherSuites确认及设置
    linux增加中文字体,宋休
  • 原文地址:https://blog.csdn.net/2301_80220607/article/details/138199637