文章目录
- 构造函数为什么不能被设置为虚函数
- 析构函数为什么可以被设置为虚函数
- 在什么情况下析构函数必须为虚函数
构造函数为什么不能被设置为虚函数
1.虚函数调用只需要“部分的信息”,即只需要知道函数的接口(函数返回类型,函数名,参数列表),而不需要对象的具体类型,但是构造一个函数的时候,必须知道具体的类型信息。如果你调用一个虚构造函数,编译器不知道你要构造的继承树上的那种类型。
- 1.构造函数的用途:创建对象,初始化对象中的属性,类型转化
- 2.再类中定义虚函数就会有一个虚函数表(vftable),对象模型中就就含有一个指向虚表的指针(_vfptr)。在定义对象时构造函数设置虚表指针指向虚函数表
- 3.使用指针和引用调用虚函数,在编译只需要知道函数接口,运行时指向对象,才能关联到具体对象的虚方法(通过虚函数指针查虚表得到具体对象中的虚方法)
- 4.构造函数是类的一个特殊成员:
1)定义对象由系统自动调用构造函数,对象自己是不可以调用构造函数;
2)构造函数的调用属于静态联编,在编译时就必须知道具体类型的信息 - 5.如果构造函数可以设置为虚函数,使用指针调用构造函数,如果编译器采用的静态联编,构造函数就不能为虚函数,