C++ 的面向对象三个特性 --继承、封装、多态的实现 ===》编译时多态
发布人:shili8
发布时间:2025-01-07 17:14
阅读次数:0
**C++ 面向对象三大特性:继承、封装、多态**
在面向对象编程中,继承、封装和多态是三个基本的特性,它们使得程序设计更加高效、易于维护和扩展。下面我们将分别讨论这些特性的实现,以及它们如何应用到 C++ 中。
###1. 继承继承是一种特殊的关系,一个类(子类)可以从另一个类(父类)继承属性和方法。这样,可以避免重复编写相同的代码,并且使得程序设计更加高效。
**示例:**
cpp// 父类class Animal { public: void eat() { std::cout << "Eating..." << std::endl; } }; // 子类class Dog : public Animal { public: void bark() { std::cout << "Barking..." << std::endl; } };
在上面的示例中,`Dog` 类继承了 `Animal` 类的 `eat()` 方法,可以直接使用。
###2. 封装封装是指将数据和方法包裹在一个类中,使得外部无法直接访问内部数据。这样可以保护数据不被意外修改,并且使得程序设计更加安全。
**示例:**
cpp// 类class BankAccount { private: double balance; public: void deposit(double amount) { balance += amount; } void withdraw(double amount) { if (balance >= amount) balance -= amount; } double getBalance() const { return balance; } };
在上面的示例中,`BankAccount` 类的 `balance` 数据是私有的,只能通过 `deposit()` 和 `withdraw()` 方法进行操作。
###3. 多态多态是指一个类可以有多个不同的行为,这取决于具体的实现。这样可以使得程序设计更加灵活和高效。
**示例:**
cpp// 基类class Shape { public: virtual void draw() =0; // pure virtual function}; // 子类class Circle : public Shape { public: void draw() override { std::cout << "Drawing a circle..." << std::endl; } }; // 子类class Rectangle : public Shape { public: void draw() override { std::cout << "Drawing a rectangle..." << std::endl; } };
在上面的示例中,`Shape` 类是一个基类,它有一个纯虚函数 `draw()`。`Circle` 和 `Rectangle` 是两个子类,它们分别实现了 `draw()` 函数。
**编译时多态**
C++ 中的多态是通过虚函数实现的,而虚函数在编译时就确定了其类型,这被称为编译时多态。
cpp// 基类class Shape { public: virtual void draw() { std::cout << "Drawing a shape..." << std::endl; } }; // 子类class Circle : public Shape { public: void draw() override { std::cout << "Drawing a circle..." << std::endl; } }; int main() { Shape* shape = new Circle(); shape->draw(); // 编译时多态 return0; }
在上面的示例中,`shape` 指针指向一个 `Circle` 对象,但是由于 `draw()` 函数是虚函数,所以编译器会根据实际类型(即 `Circle`) 来确定调用哪个 `draw()` 函数。
**总结**
继承、封装和多态是 C++ 面向对象三大特性,它们使得程序设计更加高效、易于维护和扩展。通过虚函数实现的编译时多态,使得程序设计更加灵活和高效。