📜  C++中的面向对象编程(1)

📅  最后修改于: 2023-12-03 15:29:54.960000             🧑  作者: Mango

C++中的面向对象编程

C++是一种支持面向对象编程(Object-Oriented Programming,OOP)的编程语言,它的设计初衷就是为了支持面向对象编程。面向对象编程是一种编程范式,它的核心是把问题看成对象之间的交互。

基本概念

在C++中,每个对象都有自己的属性和方法。属性可以理解为对象的状态,方法可以理解为对象的行为。如下是一个简单的示例:

class Circle {
private:
    double radius;

public:
    void set_radius(double r) {
        radius = r;
    }

    double get_radius() const {
        return radius;
    }

    double area() const {
        return 3.14 * radius * radius;
    }
};

上述代码定义了一个名为Circle的类,类中有一个私有的double类型变量radius和三个公共的方法:set_radius、get_radius和area。set_radius方法用于设置圆的半径,get_radius方法用于获取圆的半径,area方法用于计算圆的面积。

在C++中,我们可以使用类来创建对象。如下是一个示例:

Circle c;
c.set_radius(2.0);
double r = c.get_radius();
double a = c.area();

上述代码创建了一个名为c的Circle对象,并通过set_radius方法设置其半径为2.0。然后通过get_radius和area方法获取了圆的半径和面积。

继承

C++支持继承,即子类可以继承父类的属性和方法。如下是一个示例:

class Cylinder : public Circle {
private:
    double height;

public:
    void set_height(double h) {
        height = h;
    }

    double get_height() const {
        return height;
    }

    double volume() const {
        return area() * height;
    }
};

上述代码定义了一个名为Cylinder的类,它继承自Circle类。Cylinder类有一个私有的double类型变量height和三个公共的方法:set_height、get_height和volume。set_height方法用于设置圆柱的高度,get_height方法用于获取圆柱的高度,volume方法用于计算圆柱的体积。

在C++中,我们可以使用派生类来创建对象。如下是一个示例:

Cylinder cy;
cy.set_radius(2.0);
cy.set_height(3.0);
double v = cy.volume();

上述代码创建了一个名为cy的Cylinder对象,并通过set_radius和set_height方法设置其半径为2.0、高度为3.0。然后通过volume方法获取了圆柱的体积。

多态

C++支持多态,即同一个方法可以在不同的对象中有不同的实现。如下是一个示例:

class Shape {
public:
    virtual double area() const = 0;

    virtual ~Shape() {}
};

class Rectangle : public Shape {
private:
    double width;
    double height;

public:
    Rectangle(double w, double h) : width(w), height(h) {}

    double area() const {
        return width * height;
    }
};

class Triangle : public Shape {
private:
    double base;
    double height;

public:
    Triangle(double b, double h) : base(b), height(h) {}

    double area() const {
        return 0.5 * base * height;
    }
};

上述代码定义了一个名为Shape的抽象类,它有一个纯虚方法area。然后定义了两个具体的类Rectangle和Triangle,它们分别实现了抽象类Shape中的area方法。

在C++中,我们可以使用指向基类对象的指针来实现多态。如下是一个示例:

Shape* p1 = new Rectangle(2.0, 3.0);
Shape* p2 = new Triangle(4.0, 5.0);
double a1 = p1->area();
double a2 = p2->area();

上述代码创建了一个指向Rectangle对象的指针p1,和一个指向Triangle对象的指针p2。然后通过这两个指针调用了各自的area方法,实现了多态。

总结

C++中的面向对象编程是一种强大的编程范式,它的核心是把问题看成对象之间的交互。C++支持继承和多态,这使得代码更易于复用和扩展。掌握C++中的面向对象编程需要时间和实践,但毫无疑问,它值得我们去学习。