C++基础day03

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

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、在常函数中不能修改成员变量,除非该成员变量被 mutalbe 修饰。

面试题

1、C语言中的const与C++的const有什么不同

C语言和C++的const都是用来保护数据

1、不同的是C++会优化const变量的取值过程,哪怕const变量的内存被强行修改也不会改变const变量的值,这样的处理机制安全性更高

2、在C++中const还可以用来修饰成员函数(给隐藏的this指针增加const属性),定义常函数

2、一个空的结构体对象在C语言中和C++分别占多少个字节为什么?

在C语言中占0个字节,而在C++中占1个字节

1、在C++中结构体可以定义成员函数,且有默认的四个成员函数(构造、析构、拷贝、赋值),当通过结构对象调用成员函数时,会把对象的地址自动传递给成员函数,这种机制要求结构对象在内存中必须拥有一席之地,所以当结构没有成员时,编译器会让结构至少拥有1字节内存

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值