返回

《从结构到类的演变:C++ 进化的里程碑》

IOS

从结构到类的演变

C++ 中的类是从结构演变而来的,因此可以说 C++ 是“带类的 C”。在定义结构体时,我们可以使用 private 修饰数据成员,从而实现封装性。如果没有指定修饰符,默认情况下数据成员是私有的,这意味着只能通过公开成员函数来访问它们。

以下是一个 C++ 结构体的示例:

struct Point {
    int x;
    int y;
};

我们可以通过 . 运算符来访问结构体成员:

Point p;
p.x = 10;
p.y = 20;

然而,结构体缺乏封装性和数据隐藏,这可能会导致代码的可维护性和可重用性降低。为了解决这些问题,C++ 引入了类。

类是封装数据的集合,它包括数据成员和成员函数。类中的数据成员默认是私有的,这意味着只能通过类的方法来访问它们。

以下是一个 C++ 类的示例:

class Point {
private:
    int x;
    int y;
public:
    void setX(int x) { this->x = x; }
    void setY(int y) { this->y = y; }
    int getX() { return x; }
    int getY() { return y; }
};

通过将数据成员封装在类中,我们可以控制对这些数据的访问,从而提高代码的安全性。此外,类还支持继承和多态,这进一步增强了代码的可重用性和灵活性。

继承

继承允许我们创建派生类,该派生类继承基类的所有成员,并可以定义自己独特的成员。派生类可以覆盖基类方法,从而实现多态行为。

以下是一个 C++ 继承示例:

class Shape {
public:
    virtual double getArea() = 0;
};

class Rectangle : public Shape {
public:
    double length;
    double width;
    double getArea() override { return length * width; }
};

class Circle : public Shape {
public:
    double radius;
    double getArea() override { return 3.14 * radius * radius; }
};

多态

多态允许我们使用基类指针或引用来调用派生类的方法。这意味着我们可以将不同类型的对象存储在一个集合中,并使用相同的接口来访问它们。

以下是一个 C++ 多态示例:

vector<Shape*> shapes;
shapes.push_back(new Rectangle(10, 20));
shapes.push_back(new Circle(5));

for (Shape* shape : shapes) {
    cout << shape->getArea() << endl;
}

结论

C++ 中类和结构体的演变是一个重大进步,它提高了代码的可维护性、可重用性和灵活性。通过理解封装、继承和多态的概念,开发者可以充分利用 C++ 的面向对象编程特性,构建健壮且高效的应用程序。