C++类和结构区别
# C++类和结构区别
Created: March 17, 2024 10:48 PM
在C++中,结构体(struct
)和类(class
)是两种支持面向对象编程的主要构造。它们之间有很多相似之处,但也有一些关键区别。在C语言中,仅有结构体,而没有类的概念。
# C++中的结构体与类
# 相似之处
- 成员变量和成员函数:C++中的结构体和类都可以包含数据成员(成员变量)和成员函数(方法)。
- 继承:结构体和类都可以用来实现继承。
- 访问控制:结构体和类都支持三种访问控制级别:
public
、protected
和private
。
# 主要区别
- 默认的访问控制:类的成员默认是**
private
的,而结构体的成员默认是public
**的。- 在类中,如果不显式指定访问控制符,成员将默认为**
private
**。 - 在结构体中,如果不显式指定访问控制符,成员将默认为**
public
**。
- 在类中,如果不显式指定访问控制符,成员将默认为**
- 默认的继承类型:如果继承类型(
public
、protected
或private
)未被明确指定,- 类从其他类继承时,默认为**
private
**继承。 - 结构体从其他类或结构体继承时,默认为**
public
**继承。
- 类从其他类继承时,默认为**
# 为什么存在两种不同的构造?
尽管C++中的类和结构体在功能上非常相似,但它们的存在有其历史原因和使用场景:
- 历史原因:C++保留了来自其祖先语言C的**
struct
**关键字。在C中,结构体只能包含数据成员,不能包含函数。C++扩展了结构体的功能,允许它们包含函数,并引入了类作为支持面向对象编程的一种更完整的方式。 - 使用场景:结构体通常用于需要打包数据的场合,而类用于需要封装和继承的复杂对象。这一区别更多是基于约定,而不是语言强制的。
# 示例
# C++中的结构体
cppCopy code
struct MyStruct {
int data; // 默认公开
void display() { // 默认公开
std::cout << data << std::endl;
}
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# C++中的类
cppCopy code
class MyClass {
private: // 默认私有
int data;
public:
void setData(int d) { data = d; }
void display() {
std::cout << data << std::endl;
}
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
尽管C++中的结构体和类非常相似,选择使用哪一个通常取决于你的编程风格和需要表示的数据结构的复杂性。
编辑 (opens new window)