C++面向对象程序设计

深夜诗人 2021-02-04 ⋅ 18 阅读

C++是一种通用的、静态的编程语言,支持面向对象的编程范式。面向对象程序设计(Object-Oriented Programming,OOP)是一种程序设计思想,通过将数据及其处理方法捆绑在一起,实现数据的封装、继承和多态性。

类与对象

在C++中,类是一种用户自定义的数据类型,它描述了数据的属性和方法。一个类可以看作是一个对象的模板,而对象则是类的具体实例。通过定义类,我们可以创建多个相似的对象来处理相关的数据和行为。

C++中定义类的语法如下:

class 类名 {
    // 成员变量
    // 成员函数
};

使用类创建对象的语法如下:

类名 对象名;

成员变量与成员函数

类的成员变量是描述对象的特征和状态的变量,可以是各种类型的数据,如整型、浮点型、字符型等。成员函数是针对对象的操作和行为的函数,可以访问和修改成员变量,还可以调用其他函数。

下面是一个简单的示例:

class Circle {
private:
    double radius; // 成员变量

public:
    void setRadius(double r) { // 成员函数
        radius = r;
    }
    
    double getArea() { // 成员函数
        return 3.14159 * radius * radius;
    }
};

封装性

C++支持封装性,即将数据和操作数据的函数封装到一个对象中,对外界隐藏了内部实现的细节。通过访问修饰符(public、private、protected),我们可以控制对象成员的可见性。私有成员只能在类的内部访问,公有成员可以在类的外部访问。

在上面的例子中,radius被声明为私有成员,外部无法直接访问,需要通过成员函数setRadius和getArea来操作。

继承性

继承是OOP中的核心概念之一,它提供了代码重用和扩展的机制。派生类可以继承一个或多个基类,从而获得基类的属性和行为。派生类可以添加新的成员变量和成员函数,也可以重写(覆盖)从基类继承的方法。

class Shape {
public:
    virtual double getArea() = 0; // 纯虚函数
};

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

public:
    Rectangle(double l, double w) {
        length = l;
        width = w;
    }
    
    double getArea() override {
        return length * width;
    }
};

class Circle : public Shape {
private:
    double radius;

public:
    Circle(double r) {
        radius = r;
    }
    
    double getArea() override {
        return 3.14159 * radius * radius;
    }
};

上面的例子中,Shape是一个抽象基类,其中的getArea是一个纯虚函数,派生类Rectangle和Circle都需要实现该方法。

多态性

多态性是面向对象程序设计的重要特性之一,它允许不同类型的对象对同一个消息作出不同的响应。C++通过虚函数(virtual function)来实现多态性。

在上面的例子中,Shape的getArea函数是一个虚函数,由于Rectangle和Circle继承了Shape并实现了getArea函数,可以通过指针或引用来调用各自的实现。

Shape* shape1 = new Rectangle(5, 3);
Shape* shape2 = new Circle(2.5);

cout << shape1->getArea() << endl; // 输出:15
cout << shape2->getArea() << endl; // 输出:19.6349

通过多态性,我们可以编写更加灵活和可扩展的代码。

总结

C++面向对象程序设计是一种强大的编程范式,可以提高代码的可读性、可重用性和可维护性。通过类与对象、成员变量与成员函数、封装性、继承性和多态性等特性,我们可以组织和管理复杂的程序逻辑。掌握这些概念和技术,是成为一名优秀C++程序员的必备基础。


全部评论: 0

    我有话说: