C++中关于对象

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

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

1、对象的创建

a、给对象划分内存空间(栈、堆)

b、执行初始化列表

1、根据继承表的顺序,默认调用父类的无参构造函数,也可以调用有参构造 :类名(实参)

2、根据成员的定义顺序,默认调用类类型成员的无参构造函数,也可以调用有参构造 :成员名(实参)

3、初始化其它成员

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有什么不同?

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值