c++中class和struct的对比
当你在C++中定义一个类(class)或结构体(struct)时,你实际上在创建一个自定义的数据类型,用于组织和操作数据。下面是更详细的对比,并附带示例代码:
1. 成员变量和成员函数:
- 类:
- 成员变量和成员函数默认为私有属性,需要使用
public
、protected
或private
访问控制符来控制成员的访问权限。
- 成员变量和成员函数默认为私有属性,需要使用
- 结构体:
- 成员变量和成员函数默认为公有属性,即默认情况下结构体的成员是公开的,可以被外部访问。
访问控制符 | 访问权限 | 可见性 | 访问位置 |
---|---|---|---|
public | 公有 | 外部和派生类 | 内外都可 |
protected | 受保护 | 派生类 | 内部和派生类内部 |
private | 私有 | 内部 | 内部 |
// 类的定义
class MyClass {
public:
int publicVar;
void publicFunc() {
// 成员函数可以访问私有成员
privateVar = 10;
}
private:
int privateVar;
};
// 结构体的定义
struct MyStruct {
int publicVar;
void publicFunc() {
// 成员函数可以访问私有成员
privateVar = 10;
}
private:
int privateVar;
};
2. 继承:
- 类:
- 支持多种继承方式,包括单继承、多继承和虚拟继承。(具体说明点击链接)
- 结构体:
- 与类一样,也支持继承,可以继承其他结构体或类。
// 基类的定义
class BaseClass {};
// 类的继承
class DerivedClass : public BaseClass {};
// 结构体的继承
struct DerivedStruct : public BaseClass {};
3. 默认访问权限:
- 类:
- 默认的访问权限是私有(private)。
- 结构体:
- 默认的访问权限是公有(public)。
// 类的默认访问权限为私有
class MyClass {
int privateVar;
};
// 结构体的默认访问权限为公有
struct MyStruct {
int publicVar;
};
4. 默认继承方式:
- 类:
- 默认的继承方式是私有继承(private inheritance)。
- 结构体:
- 默认的继承方式是公有继承(public inheritance)。
// 类的默认继承方式为私有继承
class BaseClass {};
class DerivedClass : BaseClass {}; // 默认为私有继承
// 结构体的默认继承方式为公有继承
struct DerivedStruct : BaseClass {}; // 默认为公有继承
5. 语义:
- 类:
- 通常用于封装对象的状态和行为,以实现面向对象编程的封装、继承和多态特性。
- 结构体:
- 通常用于组织一组相关的数据,并且可以包含成员函数以操作这些数据,但它的主要目的是用于数据的组织和表示。
// 类的示例
class Point {
public:
int x, y;
void move(int deltaX, int deltaY) {
x += deltaX;
y += deltaY;
}
};
// 结构体的示例
struct Vector {
double x, y, z;
double length() {
return sqrt(x * x + y * y + z * z);
}
};
6. 使用习惯:
- 类:
- 在面向对象编程中更常见,用于定义对象的类型和行为。
- 结构体:
- 在C++中也被广泛使用,通常用于简单的数据组织和轻量级对象的定义,以及与C语言代码的交互。