📜  C ++中的类vs结构vs联合(1)

📅  最后修改于: 2023-12-03 14:39:39.196000             🧑  作者: Mango

C++中的类 vs 结构 vs 联合

在C++编程中,类、结构和联合是三种主要的用户定义类型。它们在表示数据和功能的方式上有一些相似之处,但在语法和语义上有一些重要的区别。本文将对这三种类型进行详细介绍。

类 (Class)

类是C++中最基本的用户定义类型之一。类可以包含数据成员(称为属性)和成员函数(称为方法)。它们用于表示具有共同属性和行为的对象。

类的定义以关键字 class 开始,后跟类名和类的定义体。类的定义体中可以包含公共访问(默认)、私有访问和保护访问的成员。

以下是一个类的示例:

class Person {
public:
    // 公共成员函数
    void setName(const std::string& name) {
        this->name = name;
    }
    
    std::string getName() const {
        return name;
    }
    
private:
    // 私有数据成员
    std::string name;
};

在上面的示例中,Person 是一个类,它有一个私有数据成员 name 和两个公共成员函数 setNamegetName

结构 (Structure)

结构与类类似,也可以包含数据成员和成员函数。不同之处在于,默认情况下,结构的成员是公共访问的,而类的成员是私有访问的。

结构的定义与类类似,使用关键字 struct,后跟结构名和结构的定义体。

以下是一个结构的示例:

struct Point {
    int x;
    int y;
    
    void setCoordinates(int x, int y) {
        this->x = x;
        this->y = y;
    }
};

在上面的示例中,Point 是一个结构,它有两个公共数据成员 xy,以及一个公共成员函数 setCoordinates

联合 (Union)

联合是一种特殊的数据类型,用于存储不同类型的数据,但在同一时间只能存储其中的一个。它们的存储空间大小为其最大成员的大小。

联合的定义以关键字 union 开始,后跟联合名和联合的定义体。

以下是一个联合的示例:

union Data {
    int intValue;
    float floatValue;
    char charValue;
};

在上面的示例中,Data 是一个联合,它可以存储一个整数、一个浮点数或一个字符,但一次只能存储其中之一。

类 vs 结构 vs 联合

下表总结了类、结构和联合之间的一些关键区别:

| 特性 | 类 | 结构 | 联合 | | --------- | ------------------- | ---------------------- | ------------------ | | 成员访问 | 默认为私有 | 默认为公共 | 默认为公共 | | 默认继承 | 私有继承 | 公共继承 | 无继承 | | 内存布局 | 成员按照声明顺序依次 | 成员按照声明顺序依次 | 最大成员的大小 | | 可用性 | 对象实例、指针都可 | 对象实例、指针都可 | 对象实例、指针都可 | | 数据共享 | 不共享 | 不共享 | 共享 | | 数据大小 | 不计算成员大小 | 计算成员大小 | 最大成员的大小 |

以上是类、结构和联合的基本概念和区别。选择合适的类型取决于数据的组织和访问方式。

希望本文能够让你更好地理解类、结构和联合,并在C++编程中做出明智的选择!