C++中的struct

网上很多视频中的知识点都比较旧,很多东西也是自己后来多了解了点才恍然大悟。

虽然各种编程语言一直有在更新标准,例如C++的标准从98到11再到14。

虽然C++11已经被大部分编译器支持了,遗憾的是很多视频的授课内容依旧停留在98标准,甚至不少直接就用了“C语言式”的方法来传授C++的知识,实在有点囧。

————————————————————cut-off line——————————————————————————————

在C++中,struct其实和class一样,是一个定义类的关键字,C++中的struct和C语言中的struct是大不相同的。

在C++中,令我咋舌的是,struct和class唯一的区别就是默认访问权限不同!而远不止C语言的结构体概念,所以建议C++中不要引入“结构体变量”,都统称为“类”。

例如,下面的几个简单的代码所要表示的内容都是等价的:

1. struct 定义类,默认的访问权限是public

struct ClassName01 {
    ClassName01() {}
    ~ClassName01() {}

    int a;
    double b;
};


2.

struct ClassName02 {
public:
    ClassName01() {}
    ~ClassName01() {}

    int a;
    double b;
};

3. class 定义类,默认的访问权限的private

class ClassName03 {
public:
    ClassName01() {}
    ~ClassName01() {}

    int a;
    double b;
};

有时候,我们也使用“C语言式”的语法来给一个struct 定义的类的变量赋值,并不意味着它们相似。

这是因为在C++中有一种聚合类(aggregate class)机制,提供了特殊的初始化语法形式。

——————————————————cut-off line——————————————————————————————

当一个类满足如下条件,就说它是聚合的:

1. 所有成员都是public的;

2. 没有定义任何构造函数;

3. 没有类内初始值;

4. 没有基类,也没有virtual函数;

可以提供一个花括号括起来的成员初始值列表,初始化聚合类的数据成员。

例如:

struct ClassA {    //an aggregate class.
    int id;
    string name;
};
...
ClassA Sefa = { 1234, "Sefa" };

因此,在C++中见到的形如 ClassName obj = { 1, 2 }; 其含义跟C语言是大不相同的。

而虽然继承自C语言,也支持 struct ClassName obj; 这样定义一个变量,但在C++中,没有C语言的结构体,取而代之的是类,所以也建议不要写struct。


2016/11/01 补充

C语言中是结构体的声明是:

struct StructName { ... }

而C++中的类的定义是:

struct ClassName { ... };

C++中struct定义的类后面要跟上 ';' 就是类跟C语言中的结构体的根本性的不同。


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值