社区
C++ 语言
帖子详情
c++ primer中的合成默认构造函数
caddor2011
2011-09-27 08:22:25
1.什么是合成的默认构造函数?
2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,
c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,
该怎么理解这段话?
...全文
128
9
打赏
收藏
c++ primer中的合成默认构造函数
1.什么是合成的默认构造函数? 2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型, c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈, 该怎么理解这段话?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DayThinking
2012-03-25
打赏
举报
回复
关于这个问题,你得注意默认构造函数并不是一定会生成的。一个类满足下列其中任何一个条件才会有默认的构造函数:
1.包含了一个类的对象,这个对象有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个string str即可)
2.如果继承自一些基类,其中某些基类有一个构造函数(包括编译器合成的默认构造函数)
(在class A中增加一个构造函数,B中就会自动生成默认构造函数)
3.有一个虚函数,或者继承到了虚函数
4.有虚基类
如果一个类不满足上面的4个条件,并且没有提供构造函数,编译器也不会为这个类提供默认的拷贝构造函数。
阿尔博特
2011-09-27
打赏
举报
回复
建议lz在看primer的时候不要一有问题就到csdn,我也在看primer,大多数都能看懂,看不懂的慢慢啃,多读几遍,琢磨几遍,实在不会了打个问号,或许看后面的或看其它的一些材料的时候你就会突然明白,实在不会那就csdn。学编程本来就是多动手,多思考的事。
个人看法。
阿尔博特
2011-09-27
打赏
举报
回复
[Quote=引用 2 楼 jake443403168 的回复:]
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的默认构造函数
2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,
这样的情况必须重载构造函数,如果不重载,。无法完成初始化
c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,
对于没有2写的数据类型,等类型 的全局对象即外部变量,对……
[/Quote]
这位兄台说的很对
caddor2011
2011-09-27
打赏
举报
回复
int i;
int main()
{
// A a(cin);
// A a;
//cout<<a;
cout<<i;
return 0;
}
原来 对于对象也是这样理解 ,
一直以为只是 内置类型是这样理解
[Quote=引用 5 楼 jake443403168 的回复:]
引用 3 楼 caddor2011 的回复:
何谓全局?
mfc 中的全局 估计也就theApp了。
其他都是局部对象。。。
照c++ primer的说法, 一个函数体里面的对象, 内置类型都不会被初始化了
引用 2 楼 jake443403168 的回复:
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的……
[/Quote]
Jake443403168
2011-09-27
打赏
举报
回复
[Quote=引用 3 楼 caddor2011 的回复:]
何谓全局?
mfc 中的全局 估计也就theApp了。
其他都是局部对象。。。
照c++ primer的说法, 一个函数体里面的对象, 内置类型都不会被初始化了
引用 2 楼 jake443403168 的回复:
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的默认构造函数
2. 如果一个类包含了数组……
[/Quote]
一个函数体里面的对象就是内部变量,内部变量是不会初始化的,你在main里面写个int i;
看i有没有被初始化
caddor2011
2011-09-27
打赏
举报
回复
为此
无论 有无复合型的成员数据,都应该提供一个构造函数进行初始化
[Quote=引用 3 楼 caddor2011 的回复:]
何谓全局?
mfc 中的全局 估计也就theApp了。
其他都是局部对象。。。
照c++ primer的说法, 一个函数体里面的对象, 内置类型都不会被初始化了
引用 2 楼 jake443403168 的回复:
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的默认构造函数
2. 如果一个类包含了数组……
[/Quote]
caddor2011
2011-09-27
打赏
举报
回复
何谓全局?
mfc 中的全局 估计也就theApp了。
其他都是局部对象。。。
照c++ primer的说法, 一个函数体里面的对象, 内置类型都不会被初始化了
[Quote=引用 2 楼 jake443403168 的回复:]
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的默认构造函数
2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,
这样的情况必须重载构造函数,如果不重载,。无法完成初始化
c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,
对于没有2写的数据类型,等类型 的全局对象即外部变量……
[/Quote]
Jake443403168
2011-09-27
打赏
举报
回复
1.什么是合成的默认构造函数?
由编译器自动生成的构造函数为合成的的默认构造函数
2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,
这样的情况必须重载构造函数,如果不重载,。无法完成初始化
c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,
对于没有2写的数据类型,等类型 的全局对象即外部变量,对象里面普通成员变量会自动赋0
caddor2011
2011-09-27
打赏
举报
回复
up up
2020.06.14
本文深入探讨
C++
Primer
中
关于构造函数的概念,包括其定义方式、
默认构造函数
的
合成
规则以及如何正确初始化成员变量。同时,文章还介绍了友元函数的作用及其在类
中
的声明方式。
C++
Primer
笔记之----第13章复制控制
本文系统梳理
C++
Primer
第13章核心内容,重点阐述复制构造函数、赋值运算符、析构函数三大复制控制成员的定义规则、调用时机与语义细节;分析默认行为、
合成
规则及用户自定义实现的必要性;强调资源管理、深拷贝/浅拷贝区别、RAII原则在复制控制
中
的实践应用。
C++
编译器提供的
合成
默认构造函数
详解
本文深入探讨
C++
中
默认构造函数
的误解与真相,解释编译器
合成
默认构造函数
的条件,及其在不同场景下的行为,帮助初学者正确理解和应用。
C++
Primer
- 构造函数
本文围绕类的构造函数展开,介绍了构造函数的定义、特点,如名字与类名相同、无返回类型等。还阐述了
合成
的
默认构造函数
及其适用情况,某些类不能依赖它的原因。此外,讲解了=default的含义、
默认构造函数
的调用时机、构造函数初始值列表,以及在类外部定义构造函数和委托构造函数等内容。
关于编译器是否
合成
默认构造函数
本文探讨
C++
中
默认构造函数
的
合成
条件,分析语言标准与编译器实现的区别,通过具体示例说明在哪些情况下编译器会为类
合成
默认构造函数
。
C++ 语言
65,210
社区成员
250,515
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章