社区
C++ 语言
帖子详情
c++ primer中的合成默认构造函数
caddor2011
2011-09-27 08:22:25
1.什么是合成的默认构造函数?
2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,
c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,
该怎么理解这段话?
...全文
132
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
笔记第九天 我们定义非成员函数的方式与其他函数一样,通常把函数的声明和定义分离开来。如果函数在概念上属于类但不定义在类
中
则它一般与类声明(而非定义)在同一个头文件
中
。在这种方式下,用户使用接口的任何部分都只需要引入一个文件 构造函数的名字和类名相同。和其他函数不一样的是,构造函数没有返回类型 构造函数不能声明成const 某些类不能依赖
合成
的构造函数 一:编译器只有在发现类不包含任何构造函数的情况下,才会替我们生成一个默认的构造函数。一旦我们定义了一些其他构造函数,那么除非我们再定义一
C++
Primer
笔记之----第13章复制控制
1、复制构造函数
C++
编译器提供的
合成
默认构造函数
详解
转载地址:https://www.cnblogs.com/QG-whz/p/4676481.html#_label0_0 以下内容是我自己添加的: 这里说的编译器提供的默认
合成
构造函数指的是nontrivial default constructor,即有用的默认
合成
构造函数。 对于Class X,如果没有用户声明的构造函数,那么会有一个默认的构造函数被隐式声明出来,这个声明出来的默认构造...
C++
Primer
- 构造函数
每个类都分别定义了它的对象被初始化的方式,类通过一个或者几个特殊的成员函数来控制其对象的初始化过程,这些函数叫构造函数。构造函数的任务是初始化类对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。构造函数的名字和类名相同。和其他函数不一样的是构造函数没有返回类型。不同于其他成员函数,构造函数不能被申明为const。当我们在创建类的const对象时,直到构造函数完成初始化过程,对象才真正取得”常量“属性。因此,构造函数在const对象的构造过程
中
可以向其写值。
关于编译器是否
合成
默认构造函数
1.我的疑惑 语言标准,和编译器实现是不同的。语言标准感觉就像需求吧,编译器实现则是具体的实现。语言标准
中
甚至有很多未定义的地方,比如【未指定的值】到底是多少,到底用【未指定的值】还是【陷阱标识】作为默认初始化基本数据类型的初值。再比如ungetc函数,这个更乱。 对于编译器
合成
默认构造函数
问题,我一直有疑惑,
c++
primer
上说: 如果我们的类没有显式地定义构造函数, 那么编译器就会为我们隐...
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章