📜  OOP在C++中的应用(1)

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

OOP在C++中的应用

介绍

C++是一门支持面向对象编程(OOP)的编程语言,其具有封装、继承和多态等特性,使得程序员可以更加方便地组织、实现和维护自己的代码。本文将介绍OOP在C++中的应用,包括类、对象、继承、多态等内容。

类是C++中面向对象编程的基本单元,可以视为一种数据类型的定义。类可以包含数据成员和函数成员,数据成员用于存储对象的状态信息,函数成员用于实现对象的行为。类的定义通常包含在头文件中,如下所示:

#ifndef FRUIT_H // 头文件的保护宏
#define FRUIT_H

#include <string>
using namespace std;

class Fruit { // 类定义
public: // 公有成员
    Fruit(string name, int price); // 构造函数
    virtual ~Fruit(); // 虚析构函数
    string getName() const; // 公有成员函数
    int getPrice() const; // 公有成员函数
private: // 私有成员
    string _name;
    int _price;
};

#endif // FRUIT_H

上述代码定义了一个Fruit类,其中公有成员包括构造函数、虚析构函数和两个函数成员,私有成员包括一个字符串类型的_name和一个整型的_price。特别地,虚析构函数可以用于实现多态。

对象

对象是类的实例化,通过使用new关键字可以在堆上动态地创建对象。创建对象时,可以通过构造函数初始化对象的数据成员,如下所示:

Fruit *fruit = new Fruit("apple", 5);

在使用完对象后,必须使用delete关键字释放对象所占用的内存,防止内存泄漏,如下所示:

delete fruit;
继承

继承是OOP中实现代码复用的一种机制,C++中支持单一继承和多重继承。子类继承了父类的所有数据成员和函数成员(包括私有成员,但不能直接访问),并可以通过重新定义继承的成员或添加新的成员来扩展或修改父类的功能。继承可以分为公有继承、保护继承和私有继承。下面是一个单一继承的示例代码:

class Apple : public Fruit { // 单一继承
public:
    Apple(string name, int price, int count); // 子类构造函数
    int getCount() const; // 子类函数
private:
    int _count;
};

Apple::Apple(string name, int price, int count) : Fruit(name, price) { // 子类构造函数
    _count = count;
}

int Apple::getCount() const { // 子类函数
    return _count;
}

上述代码定义了一个Apple类,继承自Fruit类,添加了一个整型的_count成员,并扩展了一个获取_count的成员函数。子类构造函数需要调用父类构造函数进行初始化。

多态

多态是OOP中实现动态绑定的一种机制,能够根据具体的对象类型在运行时决定调用哪个函数(虚函数)。C++中通过使用virtual关键字定义虚函数实现多态。下面是一个多态的示例代码:

class Fruit { // 具有虚函数的父类
public:
    virtual ~Fruit() {} // 虚析构函数
    virtual int getPrice() const { // 虚函数
        return _price;
    }
private:
    int _price;
};

class Apple : public Fruit { // 父类的子类
public:
    Apple(int price, int count); // 子类构造函数
    int getPrice() const override { // 子类的虚函数
        return _price * _count;
    }
private:
    int _count;
};

Apple::Apple(int price, int count) {
    _price = price;
    _count = count;
}

上述代码定义了一个具有虚函数的父类Fruit和一个子类Apple。Fruit类的虚函数getPrice可以被继承的子类重写(override),如Apple类的getPrice方法,这样实现了多态。注意到Apple类的构造函数中没有显式地调用Fruit类的构造函数,因为Fruit类的构造函数默认会被自动调用。

总结

本文介绍了OOP在C++中的应用,包括类、对象、继承和多态等内容。使用C++进行面向对象编程,可以更加高效地组织、实现和维护自己的代码。