分享
 
 
 

初始化类对象

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

初始化类对象

赵湘宁

问题:

C++中如何初始化类中的表数据?在C语言中,我能像下面这样初始化结构数组:

//

struct MYSTRUCT {

int x,y,z;

};

MYSTRUCT table[] = {

{ 1,2,3 },

{ 4,5,6 },

... // etc

};

//

但是如果MYSTRUCT是个C++类,而不是结构,我编译就会出错。我觉得这是C++的一个不足。

解答:

这个问题完全取决于你如何看待C++。C++的一个优点之一便是它强制你做正确的事情。例如,C++不喜欢创建对象时不调用构造函数。这只就是为什么你不能用原始数据初始化类对象的原因,不管是部分数组还是其它数据。构造函数的目的是保证每一个对象都被正确初始化,不管你是从程序栈,可用内存堆分配空间,还是作为静态数组元素。让原始数据旁路掉构造函数被忌讳的事情。也导致你不能用初始的数据来创建对象静态数组——你必须调用构造函数!

//

class CFooble {

int x,y,z;

public:

CFooble(int xx, int yy, int zz)

: x(xx),y(yy),z(zz) { ... }

CFooble(int i) { x=y=z=i; }

};

CFooble table[] = {

CFooble(1,2,3),

CFooble(4,5,6),

CFooble(0), // can use any constructor!

};

//

下面的代码是个可以编译的完整例子。

//

// StaticClassArray — 说明如何初始化在C++对象的静态C数组

// 编译方法如下:

//

// cl fooble.cpp

//

#include <stdio.h>

//////////////////

// 一个典型的类——有三个数据成员...

//

class CFooble {

protected:

int x,y,z;

public:

// 两个构造函数...

CFooble(int i) { x=y=z=i; }

CFooble(int xx, int yy, int zz) : x(xx),y(yy),z(zz) { }

// 一个输出函数

void print() {

printf("CFooble at %p: (%d,%d,%d)\n", this, x, y, z);

}

// 这个函数检查是否为空...

int IsEmpty() {

return x==0 && y==0 && z==0;

}

};

#ifdef NEVER

// 如下这样将不能运行—不能“生硬”地进行C++类对象的初始化!

CFooble table[] = {

{ 1,2,3 },

{ 4,5,6 },

{ 0,0,0 }

};

#endif

// 以下是如何初始化一个类数组:

CFooble table[] = {

CFooble(1,2,3),

CFooble(4,5,6),

CFooble(0), // 甚至可以是用不同的构造器!

};

void main()

{

for (CFooble* pc=table; !pc->IsEmpty(); pc++) {

pc->print();

}

}

//

在C++中,你能用用任何构造函数初始化数组元素,并且C++甚至用缺省的构造函数来初始化额外的元素,而不用外部的初始华例程。对我来说,这是一种进步,而不是不足。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有