注册 登录
编程论坛 C++教室

默认构造函数的问题?

newyj 发布于 2008-05-18 21:41, 857 次点击
C++和JAVA中的默认构造函数 赋给数据成员 的值是否 一样
在C++中 默认时赋给数据成员的值都是什么?
整型是什么? 布尔值是什么? 指针又是什么?
谢谢了
6 回复
#2
p1s2008-05-19 20:40
在C++中,每个类都有且必须有构造函数。如果用户没有自行编写构造函数,则C++自动提供一个无参数的构造函数,称为默认构造函数。这个默认构造函数不做任何初始化工作。

以上摘自《易学C++》第十四章,希望对LZ有帮助。
#3
找工作中2008-05-21 20:09
[bo]以下是引用 [un]p1s[/un] 在 2008-5-19 20:40 的发言:[/bo]

在C++中,每个类都有且必须有构造函数。如果用户没有自行编写构造函数,则C++自动提供一个无参数的构造函数,称为默认构造函数。这个默认构造函数不做任何初始化工作。

以上摘自《易学C++》第十四章,希望对LZ有帮助。 ...

显然是错的。
如果一个类没有任何构造函数。那么,至少当这个类有以下情况之一的时候,默认构造函数并不是不作任何初始化工作:
1.如果有基类有非trivial构造函数,譬如说,你从std::string派生
2.如果有成员对象有非trivial构造函数,譬如说,你有一个std::string成员
3.类层次上有virtual函数
4.类层次上有virtual继承
#4
p1s2008-05-22 15:19
[bo]以下是引用 [un]找工作中[/un] 在 2008-5-21 20:09 的发言:[/bo]


显然是错的。
如果一个类没有任何构造函数。那么,至少当这个类有以下情况之一的时候,默认构造函数并不是不作任何初始化工作:
1.如果有基类有非trivial构造函数,譬如说,你从std::string派生
2.如果有成员对象有非trivial ...

在钱能老师的第一版和第二版教材中,对于默认构造函数的描述都是“仅负责创建对象,不做任何初始化工作。”当然,你说的也很严谨,是正确的。可是当初学者在学习的时候往往是先接受构造函数这个概念,然后再了解平凡、非平凡、继承的问题。如果一下子把什么都交给他,他反而可能搞不懂了。所以我比较支持钱能老师的这种写法,学的时候不要去钻牛角尖。等到学会了,自己再好好研究一下倒是很有必要。
学C++不能一口吃成一个胖子的。现在的现象就是,很多高中学生跑去初中嘲笑说初中学的“负数没有平方根”根本是错误的。
#5
找工作中2008-05-22 18:01
[bo]以下是引用 [un]p1s[/un] 在 2008-5-22 15:19 的发言:[/bo]


在钱能老师的第一版和第二版教材中,对于默认构造函数的描述都是“仅负责创建对象,不做任何初始化工作。”当然,你说的也很严谨,是正确的。可是当初学者在学习的时候往往是先接受构造函数这个概念,然后再了解平凡、非平凡 ...

说的很有道理 :)
#6
bibingyan2008-05-26 23:15
意思是说我们这些C++的初学者,学习到的只是它的最基础的一些概念而已吗?而它更深沉的东西我们根本就没有接触到。。
#7
中学者2008-05-28 22:58
[bo][un]找工作中[/un] 在 2008-5-21 20:09 的发言:[/bo]


显然是错的。
如果一个类没有任何构造函数。那么,至少当这个类有以下情况之一的时候,默认构造函数并不是不作任何初始化工作:
1.如果有基类有非trivial构造函数,譬如说,你从std::string派生
2.如果有成员对 ...

明显看过深度探索C++对象模型.........我不赞同LZ得说法....如果一开始就给个错误概念,扎根以后很难改变再接受.....
1