深度探索c++对象模型 第二章

1,c++转换函数:显示转换和隐式转换。c++

隐式转换为程序员提供了很大的变量。好比整形提高,普通类型转换为类类型(operator int())都为程序带来无尽的方便。试想,若是没有整形提高,一个short类型要加上一个int类型。须要手动转换类型才能运算。程序员

可是隐式转换也会遇到问题。当程序出现问题,若是是隐式转换引发的,也很难排查到。因此在程序设计的时候,必定要考虑的很是仔细。函数

2,类中若是没有声明构造函数,编译器会给类声明一个默认构造函数。为何要这么作?spa

缘由是:编译器对全部的类的构造都要调用构造函数。因此,若是类设计程序员没有为类声明构造函数,则编译器不得不这么作。而且,编译器声明的默认构造函数什么都不会作(trivial,无用的)。不会将数据成员都清0的。只是为了知足调用规则。设计

3,指针

4,若是一个类没有定义构造函数,则默认构造函数则什么都不作。可是若是这个类中有其余类对象,则会调用这个类对象的构造函数。这个调用时编译器安插在默认构造函数之中的。若是这个类中包含多个类对象,则会按照顺序将调用对应对象的构造函数的调用安插到默认构造函数。但本类的其余数据成员仍然不可以作任何初始化操做,这个责任是程序员的。固然,若是原本有定义构造函数。那么编译器仍是会将调用其余成员对象的构造函数安插到自定义的构造函数中。对象

5,若是一个没有自定义构造函数的类继承自一个含有构造函数的基类,则派生类的默认构造函数是非无用的(nontrival)。也就是说,派生类的构造函数会被编译器安插代码,用以调用基类构造函数。若是有自定义构造函数的话,则编译器在基类的自定义构造函数中安插代码,用以调用基类的构造函数。blog

6,当类中含有虚函数时,咱们知道,这样的类对象是含有一个指针指向虚函数表的。那类对象的这个指针是怎么来的?继承

事实上,这个指针的生成是编译器的责任。它会将生成该指针的代码安插到默认构造函数会程序员自定义构造函数。编译器

7,类的深拷贝和浅拷贝

默认复制构造、默认赋值构造函数都使用浅拷贝。当须要深拷贝时,本身显示定义复制构造函数、赋值构造函数。当类中含有的对象自己支持自定义的复制构造函数、赋值构造函数,那么若是本类的其余数据成员都是基本数据类型的话,那能够不用显示定义复制构造函数、赋值构造函数。由于编译器负责将调用成员对象的复制构造函数、赋值构造函数的代码安插到本类的复制构造函数、赋值构造函数。固然,若是本类中有char*这样的类型,则,须要手动增长本类的复制构造、赋值构造函数。参考c++Primer Plus 第6版第12章。

相关文章
相关标签/搜索