struct vs class

1198阅读 0评论2012-02-28 spyhjl
分类:C/C++

struct vs class

在 C++ 中class 和 struct  只有两点主要区别:

而其它的特性,struct和class基本上,甚至严格来说是一样的:

01 //一个不常见的示例,将 struct 直接改为class也能编译通过。
02 //编译环境为 GCC 4.4.1
03 #include
04 #include
05 using namespace std;
06  
07 struct bar
08 {
09     private:// 访问权限修饰符
10         int y;
11     public:
12         bar(){};//无参构造函数
13         bar(int a){ y = a;}//带参数的构造函数
14         ~bar();//虚构函数
15         void say();
16         virtual void func1() = 0;//纯虚函数
17 };
18  
19 struct  foo: protected bar// 继承
20 {
21     private:
22           int x;
23     public:
24          foo(){};
25          void say(string msg) {cout<
26          virtual int func2();//虚函数
27  
28 };
29  
30 int main() {
31     return 0;
32 }

可以看到:


在  中也声称:

仅当叧有数据时使用 struct,其它一概使用 class。

在 C++中,关键字struct和 class 几乎含义等同,我们为其人为添加语义,以便为定义的数据类型合理选择使用哪个关键字。

struct 被用在仅包含消极对象( passive objects)上,可能包括有关联的常量,但没有存取数据成员外的函数功能,而存取功能通过直接访问实现而无需方法调用,这儿提到的方法是指只用于数据成员的,如构造函数、析构函数、Initialize()、Reset()、Validate()。

如果需要更多的函数功能,class 更适合,如果不确定的话,直接使用 class。

如果不 STL结合,对于仿函数(functors)和特性(traits)可以不用 class 而是使用struct。

虽然一些C++专家声称可以不再使用struct关键字,而可以总是使用class { public:}来代替。但事实上,struct仍在代码中广泛使用,开发人员常使用struct(部分也是由于C语言的影响)来表示一个轻量级的并不需要严格封装的记录,例如,一个写入文件的记录或数据库表结构就常用struct来声明;而class则主要是用来进行面向对象编程。

在一般情况下,仍必须使用struct结构的主要原因是:

当然,有时使用struct可以让代码看起来更简洁:

1 struct Compare { bool operator() { ... } };
2 std::sort(collection.begin(), collection.end(), Compare());

C++ 中的高级特性和语法细节太多,因此遵循一定的编程规范还是很有必要的。

上一篇:位域运算符
下一篇:开源FTP之pure-ftpd