社区
新手乐园
帖子详情
如何理解这句话..默认构造函数?
GoToSkyBird1
2012-12-29 04:25:00
如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数:
1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时;
2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数);
3、在类中的所有非静态的对象数据成员,它们对应的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。
1,第一个条件无法理解,哪位前辈给讲解下啊.
...全文
179
4
打赏
收藏
如何理解这句话..默认构造函数?
如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数: 1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时; 2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数); 3、在类中的所有非静态的对象数据成员,它们对应的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数)。 1,第一个条件无法理解,哪位前辈给讲解下啊.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时; 这句话理解不了。
C++
默认构造函数
本文围绕3个问题来
理解
C++的
默认构造函数
: 什么是
默认构造函数
?
默认构造函数
什么时候被调用? 编译器在什么情况下会生成
默认构造函数
? 一. 什么是
默认构造函数
? 我们一般会认为
默认构造函数
就是编译器...
什么是
默认构造函数
?
对于C++
默认构造函数
,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的
默认构造函数
。...实际上
这句
话
也没有说错,它说明了
默认构造函数
定义的必要非充分条件,然而
构造函数初始化(默认构造)
我们怎么
理解
这句
话
呢? 首先,什么是
默认构造函数
?
默认构造函数
时在未提供显示初始化时,用来创建对象的构造函数。也就是说,它是用于下面这种声明的构造函数: expa expa; 然后我们看下没有声明默认构造...
C++基础知识—关于
默认构造函数
的一切
C++条款—关于
默认构造函数
的一切
默认构造函数
(defaultconstructor):
默认构造函数
是在未提供显示初始值时,用来创建对象的构造函数。如果没有提供任何构造函数,则C++将自动提供
默认构造函数
,默认构造...
C++ 不能使用
默认构造函数
的情况
当程序员定义了自己的构造函数的时候,
默认构造函数
会失效。如果这个时候想要默认的构造函数,在struct或者class里面加一个空的构造函数就可以了。报错出现在main函数中的Graph graph。经检查发现,Graph中并没有...
新手乐园
33,311
社区成员
41,785
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章