| 特性 | C++ struct | C++ class | C struct |
|---|---|---|---|
| 默认访问控制符 | public | private | 全部公开 |
| 支持成员函数 | 是 | 是 | 否 |
| 继承支持 | 是 | 是 | 否 |
| 模板支持 | 是 | 是 | 否 |
| 运算符重载 | 是 | 是 | 否 |
在C++中,struct 和 class 是两种非常相似的用户定义类型,二者有一些关键区别。C++的 struct 与 C 语言中的 struct 也存在一些差异,主要是因为 C++ 提供了面向对象编程的特性。
C++中 struct 和 class 的区别
默认访问控制符不同:
struct 默认的成员访问控制是 public。class 默认的成员访问控制是 private。例如:
struct MyStruct {
int x; // 默认是public
};
class MyClass {
int x; // 默认是private
};
2.继承的访问控制符不同:
struct 默认的继承方式是 public 继承。class 默认的继承方式是 private 继承。 例如:
struct BaseStruct {};
struct DerivedStruct : BaseStruct {}; // public继承
class BaseClass {};
class DerivedClass : BaseClass {}; // private继承
语义上的差别:
在设计层面上,class 通常用于表示 面向对象编程中的类,包含封装、继承和多态等特性。struct 更常用于表示 简单的数据结构,虽然它也可以像 class 一样定义成员函数和继承关系。 C++ 结构体和 C 结构体的区别
成员函数:
在 C++ 中,struct 可以包含 成员函数 和 构造函数、析构函数,甚至支持 重载运算符。而在 C 语言中,struct 只能包含 数据成员。例如:
// C++中的结构体
struct Point {
int x, y;
Point(int a, int b) : x(a), y(b) {} // 构造函数
void display() {
std::cout << "Point(" << x << ", " << y << ")\n";
}
};
// C语言中的结构体
struct Point_C {
int x, y;
};
2.访问控制:
struct 可以使用访问控制符 public, private, 和 protected 来控制成员的访问权限,C 语言中的 struct 没有访问控制机制,所有成员都是 公开的。 例如:
struct Point {
private:
int x, y;
public:
Point(int a, int b) : x(a), y(b) {}
void display() { std::cout << x << ", " << y << "\n"; }
};
3.继承:
在 C++ 中,struct 可以支持继承,类似于类的继承关系。C 语言中的 struct 不支持继承。 例如:
struct Base {
int x;
};
struct Derived : Base {
int y;
};
4.模板支持:
C++ 中的struct 可以与模板一起使用,而 C 语言中的 struct 不支持模板。 例如:
template <typename T>
struct Box {
T value;
};
示例代码对比
C++ struct 示例
#include <iostream>
struct Point {
int x, y;
// 构造函数
Point(int a, int b) : x(a), y(b) {}
// 成员函数
void display() {
std::cout << "Point(" << x << ", " << y << ")\n";
}
};
int main() {
Point p(1, 2);
p.display();
return 0;
}
C 结构体示例
#include <stdio.h>
struct Point {
int x, y;
};
int main() {
struct Point p = {1, 2};
printf("Point(%d, %d)\n", p.x, p.y);
return 0;
}