结构体和类

在C++编程中,结构体(struct)和类(class)是两种重要的数据结构,它们允许我们定义复杂的数据类型,并封装数据和操作这些数据的方法。尽管它们在很多方面相似,但也有一些关键的区别。本教程将详细介绍结构体和类的概念、使用方法以及它们之间的区别。

1. 结构体(struct)

1.1 结构体的定义

结构体是一种用户定义的数据类型,它允许我们将不同类型的数据组合在一起。结构体的定义使用关键字 struct,后跟结构体的名称和一组用大括号 {} 包围的成员变量。

struct Point {
    int x;
    int y;
};

在这个例子中,我们定义了一个名为 Point 的结构体,它包含两个整数成员变量 x 和 y。

1.2 结构体的使用

定义结构体后,我们可以创建该结构体的实例,并访问其成员变量。

int main() {
    Point p1;
    p1.x = 10;
    p1.y = 20;

    std::cout << "Point coordinates: (" << p1.x << ", " << p1.y << ")" << std::endl;
    return 0;
}

在这个例子中,我们创建了一个 Point 类型的变量 p1,并为其成员变量 x 和 y 赋值。然后,我们通过 . 运算符访问并打印这些成员变量的值。

1.3 结构体的初始化

结构体可以通过多种方式进行初始化。最常见的方式是使用大括号 {} 进行初始化。

Point p2 = {30, 40};

在这个例子中,我们使用大括号初始化了一个 Point 类型的变量 p2,并为其成员变量 x 和 y 赋值。

2. 类(class)

2.1 类的定义

类是C++中面向对象编程的核心概念。类允许我们定义数据成员和成员函数,并控制这些成员的访问权限。类的定义使用关键字 class,后跟类的名称和一组用大括号 {} 包围的成员。

class Rectangle {
private:
    int width;
    int height;

public:
    void setDimensions(int w, int h) {
        width = w;
        height = h;
    }

    int area() {
        return width * height;
    }
};

在这个例子中,我们定义了一个名为 Rectangle 的类,它包含两个私有成员变量 width 和 height,以及两个公有成员函数 setDimensions 和 area。

2.2 类的使用

定义类后,我们可以创建该类的对象,并调用其成员函数。

int main() {
    Rectangle rect;
    rect.setDimensions(5, 10);

    std::cout << "Rectangle area: " << rect.area() << std::endl;
    return 0;
}

在这个例子中,我们创建了一个 Rectangle 类型的对象 rect,并调用其成员函数 setDimensions 来设置宽度和高度。然后,我们调用 area 函数来计算并打印矩形的面积。

2.3 类的访问控制

类中的成员可以通过访问控制符(private、public 和 protected)来控制其访问权限。默认情况下,类的成员是私有的(private)。

  • private:成员只能在类的内部访问。
  • public:成员可以在类的外部访问。
  • protected:成员可以在类的内部和派生类中访问。

3. 结构体与类的区别

尽管结构体和类在很多方面相似,但它们之间有一些关键的区别:

  1. 默认访问控制:结构体的成员默认是公有的(public),而类的成员默认是私有的(private)。
  2. 继承:结构体和类都可以继承,但结构体继承默认是公有的(public),而类继承默认是私有的(private)。
  3. 使用场景:结构体通常用于简单的数据组合,而类通常用于更复杂的数据和行为封装。

4. 实践练习

4.1 练习1:定义一个学生结构体

定义一个名为 Student 的结构体,包含以下成员变量:

  • std::string name
  • int age
  • float gpa

创建一个 Student 类型的变量,并为其成员变量赋值。然后,打印这些成员变量的值。

4.2 练习2:定义一个汽车类

定义一个名为 Car 的类,包含以下成员变量:

  • std::string make
  • std::string model
  • int year

定义一个公有成员函数 displayInfo,用于打印汽车的制造商、型号和年份。

创建一个 Car 类型的对象,并调用 displayInfo 函数。

5. 总结

结构体和类是C++中非常重要的数据结构,它们允许我们定义复杂的数据类型,并封装数据和操作这些数据的方法。结构体通常用于简单的数据组合,而类通常用于更复杂的数据和行为封装。理解结构体和类的概念及其区别,对于掌握C++编程至关重要。

通过本教程的学习,你应该能够定义和使用结构体和类,并理解它们之间的区别。继续练习和探索,你将能够更深入地掌握这些概念,并在实际编程中灵活运用。