分享
 
 
 

构造函数浅析

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

构造函数浅析

作者:normalnotebook

构造函数把一堆无逻辑联系的存储单元单位转换成一个活生生的对象.它可能用于初始化该对象的内部数据成员,也可能用于分配资源(内存、文件、信号量等等).构造函数是与类同名的成员函数.构造函数是在创建类的对象时自动调用的.其一般表现形式为:X::X();

class X

{

public:

X();

X(int );

protected:

int value;

}

以下规则基于以上的例子讲解;

规则一:声明规则Ⅰ:

1. 即没有声明默认(缺省)构造函数,也没有声明其他构造函数,合法.

2. 如果只声明了默认(缺省)构造函数,合法.

3. 如果声明了默认(缺省)构造函数,但不是公有,错误.

4. 即声明了默认(缺省)构造函数, 也同时声明了带默认参数的构造函数.错误.因为存在暧昧构造函数调用.

不带任何参数的构造函数称为默认(缺省)构造函数.如果违背了规则中的第三条,将会引起编译错误.必须声明为public型.(思考:为什么?). 如果声明了带默认参数的构造函数.即声明X(int=0 );函数.那么就可以这样调用X a;如果同时也声明了X();将会引起编译错误.因为编译器无法知道链接到哪个函数,是X();还是X(int=0 );函数呢?所以不可能出现以下这种情况.

class X

{

public:

X();

X(int=0 );//错误.这两个只能出现一个.即有我不能有你.

protected:

int value;

}

同时也要注意下列两种情况:

A. 如果没有声明默认构造函数,但声明了一个或者多个要求实参的构造函数.

那么以X a;创建对象a时,将引起编译错误.因为实参太少.只能以这种情况创建X a(参数列表);

B. 如果没有定义默认构造函数,但是定义了一个或者多个要求实参的构造函数,且带默认参数.

则可以解决A中的错误.

规则二:声明规则Ⅱ:

1. 构造函数不能指定返回值类型和返回值.

2. 不能被声明为虚函数

3. 可以重载构造函数.

与之对应的析构函数可以被声明为虚函数,但不能重载析构函数.一个类只能有一个析构函数,且不能向构造函数那样给析够函数传递参数

规则三:初始化规则:

1. 类的数据成员不能在定义类的时候初始化.

2. 必须在类的构造函数中初始化、或者在建立类的对象后在设置它们的值.

C++程序与Java程序不同,java程序可以在声明类时,给数据成员赋初值,但在C++中是不允许的.而必须在类的构造函数中初始化.即按成员初始化表来初始化数据成员.如X::X():value(3){};对于任何类型的const和引用数据成员,必须在成员初始化表中被初始化,否则,就会引起编译时刻错误.而对于其他内部类型可以在构造函数中赋初值.

规则四:调用顺序规则:

1. 在创建一个对象时自动地调用一个构造函数.

2. 在创建一个派生类对象时,首先执行基类的构造函数,然后执行派生类成员对象的构造函数,最后才执行派生类的构造函数.(析构函数的调用规则与构造函数相反).

3. 如果没有显示定义构造函数,那么编译器就会为该类添加一个默认构造函数,但该默认构造函数并不做任何初始化工作.

规则五:定义对象规则:

只有当没有声明构造函数或者声明了缺省构造函数时,或者声明了带默认参数的构造函数时,我们才能不指定实参来定义类对象.

X a(); // 编译错误 被编译器解释为定义了一个没有参数,返回一个X类型对象的函数.用缺省构造函数初始化类对象的正确声明是去掉括号.而不是调用缺省构造函数.

规则六:拷贝构造函数:

1. 当通过数值传递,通过数值返回,或者明确地拷贝一个对象时就应该调用拷贝构造函数.

2. 拷贝构造函数特征标记为:X::X(const X&).

3. 拷贝构造函数的参数虽然不一定是const,但它必须是引用.(思考,为什么?)

如果有什么不对的地方,还请大家多提批评意见.normalnotebook@126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有