对象的创建和销毁过程 成员函数区别调用的对象 常用成员 常函数 const C/C++中const异同点 空结构体字节

本文详细阐述了C++中对象从创建到销毁的过程,包括内存分配、初始化、构造函数和析构函数的调用顺序。同时,深入探讨了成员函数如何通过this指针区分调用对象,以及const成员函数的作用和使用规则,强调了const对象只能调用常函数。此外,还对比了C语言和C++中const关键字的不同,并解释了C++中空结构体对象占用1字节内存的原因。
摘要由CSDN通过智能技术生成

一、对象的创建和销毁过程

1、对象的创建过程
    a、给对象划分内存空间(栈、堆)
    b、执行初始化列表
        根据继承表顺序调用父类的构造函数,也可以调用有参构造,类名(参数)
        根据成员的定义顺序调用类类型成员的无参构造函数,也可以调用有参构造,成员名(参数)
        初始化其它成员
    c、执行构造函数,申请资源
2、对象的销毁过程
    a、执行析构函数,释放资源
    b、根据成员的定义逆序调用类类型成员的析构函数
    c、根据继承表顺序逆序调用父类的析构函数
    d、释放对象的内存

成员函数是如何区别调用它的对象

1、对象的内存只存储了它的成员变量,没有存储成员函数指针
2、当通过对象调用成员函数时,编译器会自动把对象的地址传递给它的成员函数,也就是说成员函数有一个隐藏的参数,这个参数名就是 this 指针
3、this 指针虽然是隐藏的,但也可以显式使用

常用成员

1、被 const 修饰过的成员函数,叫常函数
2、已知当通过对象调用成员函数时,编译器会把对象的地址隐式传递给成员函数
3、如果对象被 const 修饰过,就不能调用普通成员函数了,编译器报错;因为此传递的对象地址带 const 属性,而普通的成员函数隐藏式的  this 指针不带 const 属性,也就是把 const 属性的指针赋值给不带 const 属性的指针变量,编译器不允许
4、如果成员函数被 const 修饰,其实是修改隐式的 this 指针,这样 this 也就具备了 const 属性,就可以被 const 属性对象调用了
5、const 属性的对象只能调用常函数,常函数也只能调用常函数
    (普通函数可以调用常函数,常函数不可以调用普通函数)
6、在常函数中不能修改成员变量,除非该成员变量被 mutable 修饰

问题

1、C语言中的 const 与 C++ 的 const 有什么不同?
    1、C语言和 C++的 const 用来保护数据,不同的是 C++会优化 const 变量的取值过程,哪怕 const 变量的内存被强行修改,也不会改变 const 变量的值,这样的处理机制安全性更高
    2、在 C++中 const 还可以用来修饰成员函数(给隐藏和 this 指针增加 const 属性),定义常函数

2、一个空的结构体对象在 C 语言中和 C++ 中占多少个字节,为什么?
    在 C语言中占0个字节,而在 C++中占有1个字节
    在 C++中结构体可以定义成员函数,且有默认的四个成员(构造、析构、拷贝、赋值),调用通过结构对象调用成员函数时会把对象的地址自动传递给成员函数,这种机制就要求结构对象在内存中必须拥有一席之地,所以当结构没有成员时,编译器也会让结构至少拥有1字节内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值