C++中的struct专题研究,第1张

C++中的struct专题研究,第2张

C++之父Bjarn Stroustrup把C++语言的第一篇文章总结为“更好的C”。关键字struct来源于C,在C++中,struct的含义与C中的含义不同,在C++中,用户自定义类型即class与内置类型具有相同的地位。这从C++中struct定义的类型在声明变量时不必写出struct关键字就可以看出来。诸如

结构Foo {

// ...

};

foo f;

在C++程序中,人们似乎更热衷于使用类,而几乎忽略了struct的存在。实际上,struct是一个类,它的成员默认是公共的(在类中,成员默认是私有的)。其实下面两个端码是完全等价的:

代码一:

结构Foo {

// ...

};

代码2:

Foo类

公共:

// ...

};

那么struct为什么存在呢?第一个原因自然是保持与C的兼容性,原来的C代码不需要修改就可以成为合法的C++代码。第二个原因(拙见)是让struct表示抽象数据类型和抽象接口,和class表示的class概念不同。

C中struct的用法转移到C++后,还是很重要的。作为一组相关数据存在于结构中表明它们是逻辑上相关的数据。同时,它们保存在struct中而不是全局变量中,这也是一种数据管理。我个人认为,简单的用法应该取代流行的get-set用法。例如

Foo类

int栏;

公共:

int get _ bar(){ return bar;}

void set _ bar(const int & b){ bar = b;}

};
这里Foo::bar是一个需要频繁访问的数据对象。它作为Foo类的私有成员存在,通过公共接口访问。这就是面向对象思想中数据封装的体现。并且考虑这个Foo::bar是否有必要成为私有成员?不会,因为只是一段数据,没必要用私有类成员的思想来封装,这似乎是对面向对象思想的过度滥用。等值可以写成:

结构Foo {

int栏;

};

然后通过普通的赋值操作来完成。这似乎是回到了原始时代,但不要用不必要的东西,否则会影响效率。其次,struct的应用是描述纯虚类,也就是后来Java语言中类似于接口的东西:
struct Foo {

虚拟void bar 1()= 0;

虚拟void bar 2()= 0;

// ...

};

使用struct可以稍微节省编译器的解析时间:),在语义上可以表达的更清楚。

一般来说,当一个类中需要数据隐藏时,请用class声明,将私有数据标记为私有,将公共接口标记为公共;当需要所有成员都成为公共成员时,请使用struct声明。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++中的struct专题研究

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情