如何理解这句话..默认构造函数?

GoToSkyBird1 2012-12-29 04:25:00
如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数:
1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时;
2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数);
3、在类中的所有非静态的对象数据成员,它们对应的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。


1,第一个条件无法理解,哪位前辈给讲解下啊.
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2012-12-29
  • 打赏
  • 举报
回复
会。否则这个类的虚函数就调用不到。 除非用类似于__declspec(novtable)这种非标准的东西,明确禁止自动构造vtable指针。如果这样做的话就要保证这个类是用作接口类,它本身不会实例化,否则就会发生刚才的情况。
GoToSkyBird1 2012-12-29
  • 打赏
  • 举报
回复
楼上的明白您的意思。 但是 如果一个类有虚成员函数,编译器就一定会提供此类的默认构造函数吗?
FancyMouse 2012-12-29
  • 打赏
  • 举报
回复
如果有虚函数,初始化对象的时候就需要初始化vtable指针指向该类的vtable,这样虚函数才能正确调用。 这也是为什么父类的构造函数里没办法调用子类的虚函数。因为在父类构造函数里,子类构造函数还没有被调用,vtable还没指过去,因此子类的虚函数都不可见。
GoToSkyBird1 2012-12-29
  • 打赏
  • 举报
回复
主要是第一条 1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时; 这句话理解不了。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧