c++ - 多层次抽象类

标签 c++ inheritance polymorphism

我写了下面的代码。

#include <iostream>

using namespace std;

class CI
{
 public:
 virtual void display() =0; 
};


class Inter: public CI
{
 public:
  int parseData (int);
};

Inter::parseData (int data)
{
  cout <<"Parsing the data "<<data;
  return data*100;
}



class Last: public Inter
{
 public:
  void display();
};

void Last::display()
{
  cout <<" Last:: Displaying From Last "<<endl;
}

class USB: public Inter
{
 public:
  void display();
};


void USB::display()
{
  cout <<" USB:: Displaying From Last "<<endl;
}
int main ( int argc, char ** argv)
{
  int temp;
  CI *obj = new Last;

  obj->display();
  temp = obj->parseData (100);
  cout <<"Parsed DAta .. "<<temp<<endl;
  delete obj;

  obj = new USB;
  obj->display();
  temp = obj->parseData (200);

}

我的问题是:

为什么我无法调用 obj->parseData 函数?。根据我的理解,因此类“Last”和“USB”派生自类“Inter”,它应该是可调用的,对吗?..

请告诉我我的理解哪里不对?

最佳答案

obj 必须声明为 Last *,或者至少是 Inter *

Inter *obj = new Last;

Last *obj = new Last;

如果obj只是一个CI *,编译器看不到parseData()方法(你的对象被实例化为Last , 但立即隐式转换为 CI 并失去了该方法的好处)。

我建议您寻找upcast 的概念是什么意思。 (另请参阅关于隐式转换 here 或其他)...

关于c++ - 多层次抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17083103/

相关文章:

c++ - 派生类中基类的成员变量初始化顺序(构造函数)

c++ - 重载方法未在强制转换运算符重载中调用

c++ - 在 C++ 中使用多态性和仿函数实现快速性能

c++ - 交替使用类作为浮点指针

c++ - 成员函数作为 map 比较器?

c++ - 在 C++ 中是否可以定义一个纯虚函数?

java多态性

c++ - 在 'break' 中使用 'for-loop' 对性能的影响

c++ - 如何使基类中的私有(private)成员成为子类中的公共(public)成员?

javascript - 如何组织复杂的 jquery 应用程序?