| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 实用经验 64 struct和class到底什么关系? -> 正文阅读 |
|
[C++知识库]实用经验 64 struct和class到底什么关系? |
class是C++相对于C新引入的重要特征。从C++的最初名称“C witch class”,我们可看出class在C++语言中的重要地位。在C++中,在大多数情况下,我们通过class定义用户数据类型。但不要忘了作为与C语言兼容的一种扩展型语言,C++肯定会支持C语言的struct数据结构。 在C语言中,struct的定义:struct是一种自定义的数据类型。它由若干成员构成。每个成员可是一个基础的数据类型,也可是一个用户自定义的数据类型。struct的定义形式为:
所以,从定义我们可看出struct是一种数据类型,那肯定就不能定义函数方法了。因此,在C语言中,我们不能为struct定义任何的函数方法,否则编译时会报出错误。 但是,在C++语言框架中一切都变了。在C语言中为struct定义函数成员将不被允许,而在C++中你可以随意为struct定义函数成员。所以,我们可以看出struct在两种语言中的差异。在C++中struct被看做为一个对象,你可以为它定义函数成员,构造函数和析构函数,同样可以继承。但在C中,它仅仅是一种数据结构,只能在struct中定义数据成员,而不能定义函数成员。 说到这儿,你不免有些疑惑。在C++中struct和class不是一样了吗?是的,他们确实已经很接近了。基本上没有什么根本性的差异了。其主要差别表现在初始化方式,默认访问权限和默认继承方式。下面我们就分别讨论一下。 1.关于大括号初始化 class和struct如果定义了构造函数的话,都不能用大括号进行初始化。如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,则class可以用大括号初始化。
一般,在VC编译上编译上述代码,编译器会抛出下述错误:
最佳实践
2.默认访问权限 默认访问控制是struct和class最本质的一个区别,struct作为数据结构的实现体,它默认的访问权限是public,而class默认访问控制是private的。来看下面的代码:
在VC编译中,编译上述代码。编译会抛出如下异常:
3.默认继承方式 class继承默认是private继承,而struct继承默认是public继承。另外class可继承于struct,struct同样可继承于class。看下面关于继承的例子:
将上述代码在VC编译器上编译,编译器抛出如下异常:
关于默认继承:在继承过程中,public继承还是private继承,取决于子类而不是基类。无论是class继承于struct,还是struct继承于class。
4.模版方面的差异 模版应用也是class和struct的一个重要差异。在模版中,类型参数前面可以使用class或typename。如果使用struct则含义就变了。struct后面跟着的是“非类型模版参数”,而class或typename后面跟的是类型参数。看下面这个例子:
而如果将struct替换成class,则可正常编译。
通过以上的对比分析,可看出class和struct之间的差别其实还是很小的。只是在某些细节上存在差异。在使用过程中基本上可以等同看待,如我们可以像class一样为struct定义构造函数和析构函数。虽然class和struct基本上可以等同看待,但本人并不推荐这样使用它们。我建议struct还是采用C语言那种方式使用之,把它当做纯粹struct而不当作class使用。 请谨记
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/5 22:41:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |