21xrx.com
2024-11-05 18:57:39 Tuesday
登录
文章检索 我的文章 写文章
C++中多态的实现方法
2023-06-27 18:01:59 深夜i     --     --
虚函数 动态绑定 抽象类 纯虚函数 继承

在C++中,多态是一种非常重要的概念,它使得我们能够在同一个类的不同对象之间调用不同的方法。C++中实现多态的方法主要有虚函数和函数重载两种方式。

首先,通过虚函数实现多态的方法非常简单,我们只需要在父类中用virtual修饰相应的方法,在子类中进行重写即可。当父类的指针或引用指向子类对象时,会调用子类中重写的虚函数,而不是父类中的虚函数。这就是C++中的虚函数实现的多态性。

举个例子,假设有一个Company类和Manager类,Manager类继承Company类并重写了虚函数work(),如下:


class Company{

public:

  virtual void work() cout << "Company work!" << endl;

};

class Manager : public Company{

public:

  void work() override cout << "Manager work!" << endl;

};

当我们使用下面的代码进行调用时:


Manager m;

Company* c = &m;

c->work();

输出结果是“Manager work!”,因为c指向的是Manager对象,函数调用时实际上是调用Manager类中重写的work()函数。

另一种实现多态的方式是函数重载。函数重载是指在同一个类中,可以定义多个名称相同但参数个数或参数类型不同的函数。当我们调用该函数时,编译器会根据传入的参数类型和个数来自动匹配对应的函数进行调用。这种方式同样可以实现多态。

例如,我们可以写一个print()函数,分别重载int型、double型以及字符串类型,并在子类中分别进行调用:


class Company{

public:

  void print(int value) cout << "Company print int: " << value << endl;

  void print(double value) cout << "Company print double: " << value << endl;

  void print(const char* value) cout << "Company print string: " << value << endl;

};

class Manager : public Company{

public:

  void do_work() {

    print(10);

    print(3.14);

    print("Hello world!");

  }

};

当我们使用下面的代码进行调用时:


Manager m;

m.do_work();

输出结果是:


Company print int: 10

Company print double: 3.14

Company print string: Hello world!

通过函数重载也实现了多态的效果。

总的来说,C++中实现多态的方法主要有虚函数和函数重载两种方式,虚函数是实现多态的常用方法,函数重载则可以更方便地进行参数类型和个数的定制。在实际的开发中,我们需要根据具体的情况来选用适合的方法。

  
  

评论区

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