【C++】什么是类?集合体和类的区别是?

目录

一、类的基本知识

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

2.private、protected、public

3.结构体和类的区别 

二、面向对象特点

封装、继承、多态、抽象

三、类的大小


一、类的基本知识

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

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

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

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


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

银行的ATM机:

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

2.private、protected、public

  • 举例表clock说明:
  • //类:将不同类型的数据以及与这些类型相关的操作封装在一起,构成新的数据类型
    //属性+函数
    class Clock
    {
        public:
            void Set()//设置时间
            {
                m_hour=20;//m_ :说明是成员
                m_minute=10;
                m_second=10;
            }
            void Show()//显示时间
            {
                cout<<m_hour<<":"<<m_minute<<":"<<m_second<<endl;
            }
        protected:
            int m_test;
        private:
            int m_hour;//m_ :成员
            int m_minute;
            int m_second;
    }; 
    
    void main()
    {
        Clock c;//定义一个实际对象c。Clock:类,c:对象
        c.m_hour;
        //c.m_test=10;
        //c.m_hour=20;
    }
  • 访问权限:public、protected、private。一般函数为共有,属性为私有。
  • //c.m_test=10;
    //c.m_hour=20;

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

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

3.结构体和类的区别 

  • struct 默认权限是Public ,class是private
  • struct AA
    {
        void printf(); 
    };
    struct BB
    {
        void printf();
    };
    void main()
    {
        AA a;
        BB b;
        a.printf();//可以访问
        b.printf();//不能访问
    }
  • 但在c++中,一般还是用class去定义类

二、面向对象特点

封装、继承、多态、抽象

三、类的大小

举例说明:

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

  • 问:下面代码中,一个是c1输出的结果,一个是c2输出的结果,他们都是调用同一个函数,而输出函数怎么得知是哪个输出的?
  • class Clock
    {
        public:
            void Set(int h)
            {
                m_hour=h;//m_ :成员
                m_minute=20;
                m_second=30;
            }
            void Show()
            {
            //输出
            cout<<m_hour<<":"<<m_minute<<":"<<m_second<<endl;
            }
        private:
            int m_hour;//m_ :成员
            int m_minute;
            int m_second;
    }; 
    
    void main()
    {
        Clock c1;//定义一个实际对象c。Clock:类,c:对象
        Clock c2;
        c1.set(12);
        c1.show();
        c2.set(9);
        c2.show();
    }
  • 对象输出结果在非静态函数成员里面,有个隐含指针this
  • this指向当前类对象,接收当前类对象的地址,this=&当前对象
  • this是指针,只能用于指向。 
  • void Set(int h)
    {
          this->m_hour=h;//m_ :成员
          this->m_minute=20;
          this->m_second=30;
    }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值