为什么以及当使用在C基类指向一个派生类++多态性[重复]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

假设下面的代码:

class base {
public:
 int getAge(){
  return 20;
 }
};

class dri : public base {
public:
 int getAge(){
  return 30;
 }
};

int main(){

 base *b = new dri();
 std::cout << b->getAge() << std::endl;

 return 0;
}

我知道,与上面的代码被编译多态性的魔法,你会得到20在控制台中,您也可以使用关键字virtual覆盖它们。

我的问题是,为什么当你会用吗?如果你需要的类型的对象dri为什么你不只是做dri d;dri *d = new dri(),因为它已经包括base的所有功能。

c++ inheritance polymorphism
1个回答
1
投票

如果你想要一个dri,然后就继续和你声明的变量本身。

多态性的好处是,如果你需要的是被上base定义的方法,那么你可以定义变量(或最有可能的,功能参数)作为base *(或base &)和你的代码将与来自base派生的任何类工作包括dri

如果只有两个在您的系统(basedri)班则很难看到它的好处。但可想而知,基类的东西更普遍喜欢DataSource,它有一个叫readData方法。现在,您可以编写代码读取从源数据,而不必担心数据源是DatabaseKeyboardSensor或其他任何东西。你可以写在数据处理逻辑,后来别人可以一起去,并通过创建新DataSource子类添加新的来源。

为了使这项工作,所涉及的方法必须是virtual。如果你定义一个非虚base方法,并用base指针或引用调用它,您总能获得该功能,即使一个子类试图将其覆盖。所述virtual关键字告诉C ++调用的实际的对象类型,而不是声明的变量类型定义的方法。

© www.soinside.com 2019 - 2024. All rights reserved.