0

我有一个像这样的 A 类和 B 类:

class A
{
public:
   A(){}
};

class B : public A
{
public:
   B() : A()
   {
      value = 10;
   }
   int Value()
   {
      return value;
   }

protected:
   int value;
}:

我有这个代码:

int main()
{
   A* a = new B();
   // how can I access to Value() ? I would like to make that :
   int val = a->Value();
   // must i cast a to B ? how ?
}

谢谢你的帮助。

4

4 回答 4

6

使 Value() 成为 A 中的纯虚函数(同时添加一个虚析构函数):

class A
{
public:
  A(){}
  virtual ~A(){}
  virtual int Value() = 0;
};
于 2012-12-17T20:47:55.673 回答
1

问题是, Virtual() 不是继承的。它没有在 A 中定义。

将 A 中的 Value() 声明为纯虚拟。

virtual int Value() = 0;

您无法访问 Value() 因为就编译器而言, A (这是您正在创建的对象类型)中没有 Value() 函数。

于 2012-12-17T20:46:50.387 回答
1

使用虚方法

class A
{
public:
   A(){}
   virtual int Value() = 0;
   virtual ~A(){}
};

class B : public A
{
public:
   B() : A()
   {
      value = 10;
   }
   int Value()
   {
      return value;
   }

protected:
   int value;
}:

还要记住(告诉不要问原则)。

于 2012-12-17T20:48:16.860 回答
0

改为这样做:

B* b = new B();

如果您需要Bmake a 的功能B

于 2012-12-17T20:46:45.590 回答