21xrx.com
2024-11-22 07:41:53 Friday
登录
文章检索 我的文章 写文章
C++中基类调用派生类函数的方法
2023-06-22 06:26:21 深夜i     --     --
C++ 继承 基类 派生类 调用函数

在C++中,面向对象编程是一大特点。很多时候,我们需要编写一个基类,然后通过继承的方式来实现派生类。在派生类中我们可以重新定义基类的函数来实现特定功能。但是有些情况下,我们需要调用这些派生类的函数,该怎么办呢?

实际上,在C++中,基类是可以调用派生类的函数的,这个过程称为“多态”。多态的实现需要使用虚函数,虚函数是在基类中使用virtual关键字声明的函数,它的特点是可以被派生类中的同名函数覆盖,并且在运行时判断对象的类型,调用相应的函数。

具体来说,我们可以按照以下步骤来实现:

1. 在基类中定义需要调用的虚函数。注意,这个函数的实现不一定是在基类中定义,而是在各个派生类中根据需要进行实现。

2. 在派生类中重写这个函数,并在函数中实现相应的逻辑。

3. 在基类中使用指向派生类对象的指针进行多态调用。

看下面一个例子:


#include<iostream>

using namespace std;

class Shape {

public:

  virtual double area() = 0;

};

class Circle: public Shape {

private:

  double radius;

public:

  Circle(double r): radius(r) { }

  double area() {

   cout << "计算圆面积:" << endl;

   return 3.14 * radius * radius;

  }

};

class Rectangle: public Shape{

private:

  double length;

  double width;

public:

  Rectangle(double l, double w): length(l), width(w) { }

  double area() {

   cout << "计算矩形面积:" << endl;

   return length * width;

  }

};

int main() {

  Shape *shape;

  Circle circle(5);

  Rectangle rectangle(10,6);

  shape = &circle;

  cout << shape->area() << endl;

  shape = &rectangle;

  cout << shape->area() << endl;

  return 0;

}

在这个例子中,我们定义了一个Shape类作为基类,圆形类和矩形类作为派生类。Shape类中定义了一个纯虚函数area(),并且使用了关键字virtual。圆形类和矩形类都继承了Shape类,并且在其中重写了area()函数,分别计算圆形和矩形的面积。在主函数中,我们先定义了指向Shape类对象的指针shape,然后分别定义了Circle和Rectangle对象,并将指针shape指向这些对象。随后,通过指针shape多态调用area()函数,返回各自对象所属的面积。

多态性是C++中的一个重要特性,它可以使程序更加灵活和可扩展。因此,在实际编程中,我们需要熟练掌握这个特性来编写更加高效的程序。

  
  

评论区

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