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字节 |
C++中关于对象
最新推荐文章于 2024-07-30 14:43:24 发布