特性 | 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;
}