类和对象(2)--《Hello C++ Wrold!》(4)--(C/C++)

06-02 1331阅读

文章目录

  • 前言
  • 计算类对象的大小
  • this指针
  • 类和对象(1)和(2)的作业部分

    前言

    这期将会讲解关于类的计算类对象的大小,this指针,类和对象(1)和(2)的作业部分。下期的话将会讲解类里面的6个默认成员函数,也是难点所在(类和对象的两大难点之一——另一个难点是构造函数的初始化列表)

    计算类对象的大小

    跟C++的结构体一样也需要内存对齐

    类对象和类的大小只算成员变量,不算成员函数 成员函数是放在代码段的

    类的大小跟类对象的大小是一样的

    内存对齐:

    1.对齐数 = 编译器默认的对齐数 和 成员中最大的那个 当中的较小者

    2.结构体的总大小 = 对齐数的整数倍

    3.第一个成员开头的起始位置是0

    4.其他所有成员变量的起始位置都是要是对齐数的整数倍地方

    要注意的是:这里的对齐数跟硬件读取一次读多少是没啥关系,但是这个对齐数能提高硬件读取的效率
      (这也就是为什么要内存对齐)
    

    类和对象(2)--《Hello C++ Wrold!》(4)--(C/C++)

    没有成员变量的类对象,也会开辟1字节的空间,为了占位,表示对象存在 此时没有存储有效数据

    eg: 比如class list{
      public:
        void Init(){}
    };
    

    this指针

    一个类里面的对象都是用的一样的成员函数,但是成员函数可以识别出是哪个对象调用的它–这就多亏了this指针

    其实,在对象调用成员函数时,编译器会自动添加实参和形参(this)–参数有时只看()里面的,不能一概而论

    比如: void Init(Date*this)--这里写成(Date*const this)是等价的,因为this的性质
    {…………}
    

    但是我们自己在写的时候,不能添加上(也就是this不能在形参和实参显式传递),但是,在函数内部可以使用this(也就是在函数内部可以显式使用)

    eg:if(this->_a == 1)
    

    注意:this指针的类型是 类型*const,因为不能给this指针赋值

    引申:

    const在*后面的话,是限制的指针,在*前面的话,是限制的指针指向的内容

    语法形式能否修改指针的指向(地址)?能否通过指针修改指向的对象?
    const int *ptr可以不可以
    int *const ptr不可以可以
    const int *const ptr不可以不可以

    问:this存在哪里?

    this是形参,所以this指针是跟普通参数一样存在函数调用的栈帧里面的

    比如:在VS下,this指针是存储在ecx(寄存器)里的

    类和对象(1)和(2)的作业部分

    在C++中的结构体是否可以有成员函数?(B)
    A.不可以,结构类型不支持成员函数
    B.可以有
    C.不可以,只有类允许有成员函数
    C++里面的结构体也可以拥有类的特性
    
    // 1.下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
    class A
    {
    public:
     void Print()
     {
     cout 
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码