设为首页 加入收藏

TOP

8.1.1 关键字struct与class的困惑
2013-10-07 15:58:23 来源: 作者: 【 】 浏览:60
Tags:8.1.1 关键字 struct class 困惑

8.1.1 关键字struct与class的困惑

C++(www.cppentry.com)语言对C语言的struct进行了改造,使其也可以像class那样支持成员函数的声明和定义,从而使struct变成真正的抽象数据类型(Abstract Data Type, ADT),这使得许多人对struct和class倍感困惑。

当语言支持某种特征时,是否使用这种特征则完全取决于程序员。因此,并不是说class支持成员函数的定义,我们就一定要在每一个class中都定义成员函数;也并不是说struct过去不支持成员函数定义,我们就非得用class完全取代struct。实际上就C++(www.cppentry.com)语言本身来讲,struct和class除了"默认的成员访问权限"这一点不同外,没有任何区别。

【提示8-1】: 在C++(www.cppentry.com)语言中,如果不特别指明,struct成员的默认访问限定符为public,而class成员的默认访问限定符为private。

因此,在C++(www.cppentry.com)程序中,只要你明确地声明每一个成员的访问权限,那么完全可以用struct取代class,也完全可以用class取代struct,见示例8-1。

示例8-1

struct  SA < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

{

public :

const char * GetName( ) const;

private :

char *m_name ;

int m_height ;

int m_weight ;

};

class  CA

{

public :

const char * GetName( ) const;

private :

char *m_name ;

int m_height ;

int m_weight ;

};

本例中SA和CA这两个类型在C++(www.cppentry.com)中没有任何不同。就像Lippman所说的那样,"在C++(www.cppentry.com)中,选择使用关键字struct还是class来定义UDT或ADT完全是一种观念上的差异,而关键字本身并没有代表这种差异"。

我们再看一看C++(www.cppentry.com)鼻祖Bjarne Stroustrup是如何说的:"带类的C和C语言几乎是'代码兼容'的,并且也是连接兼容的。C的函数可以在带类的C程序中调用,带类的C函数也可以在C程序中调用;带类的C程序中的struct和C中的struct在两个语言里的布局都一致,所以可以在两个语言之间传递简单对象或组合对象。这种连接兼容性一直保持到C++(www.cppentry.com)中。"

C++(www.cppentry.com)仍然支持C风格的struct,并且还做了增强,主要是为了兼容遗留的C代码以使它们可以在新的C++(www.cppentry.com)环境下重新编译而继续"发挥余热",可以让"过程式和结构化思想根深蒂固"的C程序员比较容易地过渡到面向对象的C++(www.cppentry.com)语言。关于这个问题更具哲学性的讨论请参考Lippman所著的《Inside The C++(www.cppentry.com) Object Model》一书。

【建议8-1】: 为了不使程序产生混乱和妨碍理解,建议还使用struct定义简单的数据集合;而定义一些具有行为的ADT时最好采用class,如果采用struct似乎感觉不到面向对象的味道了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.1 结构(struct) 下一篇8.1.2 使用struct

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 安装及连接-腾 (2025-12-25 06:20:28)
·MySQL的下载、安装、 (2025-12-25 06:20:26)
·MySQL 中文网:探索 (2025-12-25 06:20:23)
·Shell脚本:Linux Sh (2025-12-25 05:50:11)
·VMware虚拟机安装Lin (2025-12-25 05:50:08)