C++面向对象中的坑和细节

必须使用初始化列表的情况,访问父类private变量时也需要
初始化列表中初始化顺序和成员变量声明顺序一致,而不是和初始化列表中顺序一致

C++中struct和class区别
1.成员类型上:class中默认是private,struct中默认是public;
2.继承时:class是默认private,struct默认public
3.其他:class可以表示模板类型,struct不能;

静态成员的特殊性:独此一份,所有人共享
不能在类内部进行初始化
静态数据成员不受private修饰作用
静态成员函数无法调用类的非静态数据成员
优点:不会在程序中其他全局名字冲突
隐藏信息

构造函数可被重载,析构函数不可以
派生类创建实例时先执行基类构造函数再执行派生类构造函数,析构函数相反。
不要对构造函数进行嵌套调用,否则会产生不利影响,首先,真正起作用的是第一个构造函数,其余的只是构造出一个临时变量而已

explicit关键字:防止隐式转换,普通构造函数可以被隐式调用,用explicit可以防止出现这个情况。

虚析构函数的作用
为了正确地进行多态行为,如果一个基类指针p指向派生类对象,而基类的析构函数未声明为virtual,则delete对象时仅仅调用基类的析构函数而造成内存泄漏,所以只有一个类被作为基类时,才会把它的析构函数声明为virtual。

深拷贝和浅拷贝
详细解释
简单的说,浅拷贝会导致不同实例中的成员指向同一块内存,而析构时却析构两次,这样就会出错。深拷贝就是给各自的成员都分配到不同的内存。

猜你喜欢

转载自blog.csdn.net/kellen_f/article/details/79154560