构造函数的问题
举一例说明,定义一个类时,在某些情况下一定要保证它要有个不带参数或提供了全部缺省参数值的构造函数。 问题点数:0、回复次数:9Top
1 楼widewave(冯雨(历史事实))回复于 2003-01-04 00:07:45 得分 0
参考STL。Top
2 楼sea_lover(CodePlus)回复于 2003-01-04 00:25:42 得分 0
请参看《More Effective C++》Item M4条款:避免无用的缺省构造函数。
缺省构造函数(指没有参数的构造函 数)在C++语言中是一种让人无中生有的方法。构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就初始化对象。有时这样的方法是不错的,例如一些行为特性与数字相仿的对象被初始化为空值或不确定的值也是合理的,还有比如链表、哈希表、图等等数据结构出可以被初始化为空容器。但不是所有的对象都属于上述类型,对于很多对象来说,不利用外部数据进行完全的初始化是不合理的。比如一个没有输入姓名的地址薄对象,就没有任何意义。在一些公司里,所有的设备都必须标有一个公司ID号码,所以在建立对象以模型化一个设备时,不提供一个合适的ID号码,所建立的对象就根本没有意义。Top
3 楼sea_lover(CodePlus)回复于 2003-01-04 00:26:08 得分 0
请参看《More Effective C++》Item M4条款:避免无用的缺省构造函数。
缺省构造函数(指没有参数的构造函 数)在C++语言中是一种让人无中生有的方法。构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就初始化对象。有时这样的方法是不错的,例如一些行为特性与数字相仿的对象被初始化为空值或不确定的值也是合理的,还有比如链表、哈希表、图等等数据结构出可以被初始化为空容器。但不是所有的对象都属于上述类型,对于很多对象来说,不利用外部数据进行完全的初始化是不合理的。比如一个没有输入姓名的地址薄对象,就没有任何意义。在一些公司里,所有的设备都必须标有一个公司ID号码,所以在建立对象以模型化一个设备时,不提供一个合适的ID号码,所建立的对象就根本没有意义。
-----------------------------------------------------------
【◇SeaLover◆〗
/ \
★---CSDN---☆
\ /
【○Trust Me●〗
Top
4 楼Firstbyte(尘飞扬)回复于 2003-01-05 08:51:06 得分 0
比如说
Account * pt=new Account[10];
就要有缺省构造函数.
或 定义
Account account;
的时候.
Top
5 楼shooper(东东)回复于 2003-01-05 09:51:47 得分 0
在类定义时没有定义任何构造函数时,编译器自动生成一个不带参数的缺省构造函数。所以说,对任何对象都是要用构造函数来初始化的。Top
6 楼tianzhhy(天之痕)回复于 2003-01-05 10:38:27 得分 0
如果你搞清楚构造函数的作用,也许你的问题就会解决了。
每一个对象是类的一个实例,在对象定义时必须初始化,因此构造函数是比不可少的。至于是否要带参数,要看实际情况。看看楼上的同学举的例子。Top
7 楼cjnet(孤星剑)回复于 2003-01-05 18:11:17 得分 0
这是为了防止编译程序时出错。Top
8 楼jiangpeng(Mr. J)回复于 2003-01-05 20:07:30 得分 0
当你要定义一个对象集合的时候,必须有缺省构造函数。如:
struct A
{
A() : m_i(0) {}
int m_i;
}
A a[10];
如果没有缺省构造函数是不行的Top
9 楼jiangpeng(Mr. J)回复于 2003-01-05 20:23:34 得分 0
不好意思例子用错了:(
struct A
{
//A() : m_i(0) {}
A(int i) : m_i(i) {}
int m_i;
}
A a[10]; //如果不定义A::A()是不行的
详情请看<<C++ 沉思录>> P39
Top




