• 【C++】类


    目录

    一、类的基本知识

    1.什么是面向对象?什么是类?

    2.private、protected、public

    3.结构体和类的区别 

    二、面向对象特点

    封装、继承、多态、抽象

    三、类的大小


    一、类的基本知识

    • 是什么?
      • 将现实生活中实实在在的一些实体的共性抽象出来,形成一个类型。
    • 类和对象的区别?
      • 类是将不同类型的数据,以及与这些数据相关的操作,构成一个新的数据类型,在现实生活中并不存在,而且不占用内存单元(就像int a,int是不占用内存,a占用内存)

    1.什么是面向对象?什么是类?

            对象是 面向对象 技术的核心所在,面向对象技术中的对象就是现实世界中,某个 物理实体在计算机世界(逻辑)中的映射和体现。也就是说计算机中的对象,是模拟现实世界的实体。

    • 对象是现实世界的模拟实体
    • 对象是类的实例化
    • 类是对主观世界、抽象类别的设计 


    先有实体 再有概念实体 再是类型

    银行的ATM机

    • 类是一组相关的属性(变量)和行为 (方法)的集合。
    • 类是由一个抽象概念设计的产物对象,是由一个类型实例化后的具体表现形式。
    • 成员变量是对象的属性 (可以是变量,指针,数组等),属性的值确定对象的状态成员函数是对象的方法,确定对象的行为。

    2.private、protected、public

    • 举例表clock说明:
      1. //类:将不同类型的数据以及与这些类型相关的操作封装在一起,构成新的数据类型
      2. //属性+函数
      3. class Clock
      4. {
      5. public:
      6. void Set()//设置时间
      7. {
      8. m_hour=20;//m_ :说明是成员
      9. m_minute=10;
      10. m_second=10;
      11. }
      12. void Show()//显示时间
      13. {
      14. cout<":"<":"<
      15. }
      16. protected:
      17. int m_test;
      18. private:
      19. int m_hour;//m_ :成员
      20. int m_minute;
      21. int m_second;
      22. };
      23. void main()
      24. {
      25. Clock c;//定义一个实际对象c。Clock:类,c:对象
      26. c.m_hour;
      27. //c.m_test=10;
      28. //c.m_hour=20;
      29. }
    • 访问权限:public、protected、private。一般函数为共有,属性为私有。
    • //c.m_test=10;
      //c.m_hour=20;

           这两个是不允许在main内使用,因为在外界不能用protected和private

    • private为私有,一般需要通过函数接口间接访问,不能直接访问
    • 这样使用:
      • 想要调试表,在public的set()内设置表的时间,show()内输出时间

    3.结构体和类的区别 

    • struct 默认权限是Public ,class是private
      1. struct AA
      2. {
      3. void printf();
      4. };
      5. struct BB
      6. {
      7. void printf();
      8. };
      9. void main()
      10. {
      11. AA a;
      12. BB b;
      13. a.printf();//可以访问
      14. b.printf();//不能访问
      15. }
    • 但在c++中,一般还是用class去定义类

    二、面向对象特点

    封装、继承、多态、抽象

    三、类的大小

    举例说明:

      1. class AA
      2. {
      3. public:
      4. void test();
      5. private:
      6. int m_i;
      7. char m_sex;
      8. int m_age;
      9. static int m_num;
      10. }
      11. void main()
      12. {
      13. count<<sizeof(AA)<
      14. }
    • 根据内存对其原则,输出结果为12
    • 操作函数test()函数不占大小,无论是普通的还是静态的 //存在代码区不在属性区
    • 因此,类的大小是属性值和
    • 而静态还是不占内存大小
      1. class AA
      2. {
      3. public:
      4. void test();
      5. virtual void fn();
      6. private:
      7. int m_i;
      8. char m_sex;
      9. int m_age;
      10. static int m_num;
      11. }
      12. void main()
      13. {
      14. count<<sizeof(AA)<
      15. }
    • 上述结果是16
    • 虚函数占内存大小
      1. class AA
      2. {
      3. public:
      4. void test();
      5. virtual void fn();
      6. virtual void fn1();
      7. virtual void fn2();
      8. private:
      9. int m_i;
      10. char m_sex;
      11. int m_age;
      12. static int m_num;
      13. }
      14. void main()
      15. {
      16. count<<sizeof(AA)<
      17. }
    • 上述运行结果还是16
    • 虚函数在类中分配一个指针的大小,无论是多少都是4字

    • 问:下面代码中,一个是c1输出的结果,一个是c2输出的结果,他们都是调用同一个函数,而输出函数怎么得知是哪个输出的?
      1. class Clock
      2. {
      3. public:
      4. void Set(int h)
      5. {
      6. m_hour=h;//m_ :成员
      7. m_minute=20;
      8. m_second=30;
      9. }
      10. void Show()
      11. {
      12. //输出
      13. cout<":"<":"<
      14. }
      15. private:
      16. int m_hour;//m_ :成员
      17. int m_minute;
      18. int m_second;
      19. };
      20. void main()
      21. {
      22. Clock c1;//定义一个实际对象c。Clock:类,c:对象
      23. Clock c2;
      24. c1.set(12);
      25. c1.show();
      26. c2.set(9);
      27. c2.show();
      28. }
    • 对象输出结果在非静态函数成员里面,有个隐含指针this
    • this指向当前类对象,接收当前类对象的地址,this=&当前对象
    • this是指针,只能用于指向。 
      1. void Set(int h)
      2. {
      3. this->m_hour=h;//m_ :成员
      4. this->m_minute=20;
      5. this->m_second=30;
      6. }

    八股| 空类的大小是多少?加个int呢?虚函数在类内继承的大小?​_又秃又弱的博客-CSDN博客 

  • 相关阅读:
    webstorm 使用 live edit 调试时 加载外部资源出现CORS跨域的解决办法
    cwebscaner不显示网站
    基于时空注意力的图卷积网络在路段级交通预测中的应用
    2025~《数据结构》试题~考研
    名牌大学毕业,在名企担任程序员月薪5万,却为何选择离职当司机
    基于Material Design风格开源、易用、强大的WPF UI控件库
    【MySQL & JDBC】使用Java连接MySQL数据库
    浏览器简介
    C语言函数递归调用
    如何部署和配置IPv6
  • 原文地址:https://blog.csdn.net/qq_53830608/article/details/127034391