21xrx.com
2024-11-22 06:48:26 Friday
登录
文章检索 我的文章 写文章
C++中的继承和多态详解
2023-07-07 00:43:47 深夜i     --     --
C++ 继承 多态 详解 面向对象编程

C++ 是一种支持面向对象编程(OOP)的编程语言,其中继承和多态是 OOP 中最重要的概念之一。在本文中,我们将详细讨论 C++ 中的继承和多态。

继承是一种 C++ 特性,它允许我们创建一个派生类或子类,该子类可以继承父类或基类的成员和特性。子类继承父类的属性后可以通过修改和添加新的方法和属性实现一些特殊的功能。C++ 中使用关键字“class” 或“struct” 定义类或结构体,使用“:”来实现继承关系。

例如,下面是一个简单的类定义:


class Shape {

  public:

   void setWidth(int w)

     width = w;

   

   void setHeight(int h)

     height = h;

   

  protected:

   int width;

   int height;

};

class Rectangle: public Shape {

  public:

   int getArea() {

     return (width * height);

   }

};

这段代码中,Rectangle 类继承了 Shape 类。子类如何使用继承的属性和方法取决于其访问修饰符。在上面的示例中,setWidth() 和 setHeight() 是公共方法,可以从 Rectangle 类的任何地方访问;width 和 height 成员是受保护的,只能从 Rectangle 类内部或其子类中访问。

多态是 OOP 中的另一个重要概念,它允许我们使用基类指针或引用指向子类对象,并在运行时确定要调用的方法。C++ 中的多态通过虚函数和抽象类实现。抽象类是一个基类,它没有实现任何方法,但可能包含一个或多个虚函数,它们可以在子类中实现。

例如,下面是一个示例程序:


#include <iostream>

using namespace std;

class Shape {

  protected:

   int width;

   int height;

  public:

   virtual int getArea() = 0;

   void setWidth(int w)

     width = w;

   

   void setHeight(int h)

     height = h;

   

};

class Rectangle: public Shape {

  public:

   int getArea() {

     return (width * height);

   }

};

int main() {

  Shape *shape;

  Rectangle rect;

  shape = &rect;

  shape->setWidth(5);

  shape->setHeight(7);

  cout << "Area of the rectangle: " << shape->getArea() << endl;

  return 0;

}

在这个程序中,Shape 是一个抽象类,它没有实现 getArea() 方法,因此它必须声明为纯虚函数。子类 Rectangle 通过继承 Shape 类并实现 getArea() 方法来提供 Shape 类的实现。主函数在运行时创建了一个指向 Rectangle 类对象的 Shape 类指针,并使用该指针调用 getArea() 方法。由于 getArea() 是一个虚函数,因此运行时将选择子类的实现,而不是基类的实现。

继承和多态是 C++ 的重要特性,它们使得 OOP 更加有力和灵活。要使用这两种特性,需要仔细考虑类的设计和访问修饰符的使用。掌握这两个特性可以帮助程序员开发出更高效、更复杂的程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复