c++中很特殊的一类自定义数据-结构体
为什么说c++中的结构体特殊,因为它即不同于c中的结构体,基本和c++中的class也是不同的
一、c++ 结构体(struct)简介
在 c++ 中,struct 是一种用户自定义的数据类型,它不仅可以包含数据成员(变量),还可以包含成员函数(方法),支持继承、多态等面向对象特性。(重点,需要记住)。
c++ 的 struct 是 c 语言 struct 的超集,同时也是一种特殊的类(class)。(这句话就很好的总结了c++中struct和c中struct的关系和c++中的class的关系)
二、c 语言中的结构体
在 c 语言 中,struct 仅用于聚合数据,不能包含成员函数,也不支持访问控制和继承。
示例(c 语言)
运行
#include <stdio.h>
struct point {
int x;
int y;
};
int main() {
struct point p1 = {10, 20};
printf("x = %d, y = %d\n", p1.x, p1.y);
return 0;
}特点:
- 只能包含数据成员
- 所有成员默认为 public
- 不能有成员函数
- 不支持继承、多态
- 声明变量时必须带
struct关键字(除非用typedef)
三、c++ 中的结构体
c++ 保留了 c 语言 struct 的所有功能,同时增加了面向对象特性。
示例(c++ 结构体)
运行
#include <iostream>
using namespace std;
struct point {
int x;
int y;
// 成员函数
void print() {
cout << "x = " << x << ", y = " << y << endl;
}
// 构造函数
point(int a, int b) : x(a), y(b) {}
};
int main() {
point p1(10, 20); // 直接创建对象
p1.print();
return 0;
}特点:
- 可以包含成员函数(方法)
- 支持构造函数和析构函数
- 支持访问控制(public / private / protected)
- 支持继承
- 支持多态(虚函数)
- 默认访问权限为 public(与 class 不同)
- 默认继承方式为 public(与 class 不同)
四、c++ struct 与 c struct 的区别
| 特性 | c 语言 struct | c++ struct |
|---|---|---|
| 成员类型 | 只能是数据成员 | 可以是数据成员 + 成员函数 |
| 访问控制 | 无(默认为 public) | 支持 public /private/protected |
| 构造函数 | 不支持 | 支持 |
| 继承 | 不支持 | 支持 |
| 多态(虚函数) | 不支持 | 支持 |
| 使用 struct 关键字 | 声明变量必须带 struct | 可直接用结构体名作为类型名 |
| 初始化 | 仅支持聚合初始化 | 支持聚合初始化 + 构造函数初始化 |
五、c++ struct 与 class 的区别
在 c++ 中,struct 和 class 几乎完全相同,唯一的区别在于默认访问权限和默认继承方式。
| 对比项 | struct | class |
|---|---|---|
| 默认成员访问权限 | public | private |
| 默认继承方式 | public | private |
| 其他特性 | 完全一致(构造函数、析构函数、虚函数、模板等) | 完全一致 |
示例(默认访问权限差异)
运行
struct s {
int a; // 默认 public
};
class c {
int a; // 默认 private
};
int main() {
s s;
s.a = 10; // ok,public 成员
c c;
// c.a = 10; // 错误!a 是 private 成员
}示例(默认继承方式差异)
运行
struct base {
int x;
};
struct derived1 : base { }; // 默认 public 继承
class derived2 : base { }; // 默认 private 继承
int main() {
derived1 d1;
d1.x = 10; // ok,public 继承
derived2 d2;
// d2.x = 10; // 错误!base::x 在 derived2 中是 private
}六、使用建议
c++ struct 通常用于:
- 仅包含数据,没有或只有少量简单方法(类似 c 结构体的用途)
- 与 c 语言兼容的接口定义
c++ class 通常用于:
- 需要封装、继承、多态的复杂类型
- 强调数据隐藏和接口暴露的面向对象设计
总结
c++ struct 是 c struct 的超集,增加了成员函数、访问控制、继承、多态等面向对象特性。
与 c++ class 的唯一区别在于默认访问权限和默认继承方式:
struct:默认 public 成员 & public 继承class:默认 private 成员 & private 继承
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论