c++ primer中的合成默认构造函数

caddor2011 2011-09-27 08:22:25
1.什么是合成的默认构造函数?




2. 如果一个类包含了数组, 指针,成员对象等复杂的 类型,



c++ primer中提到;对于全局对象,那么 可以别初始化的, 如果不是全局对象,不会被初始哈,

该怎么理解这段话?


...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用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

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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