如何访问继承的成员

时间:2012-12-17 20:44:06

标签: c++

我有这样的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 个答案:

答案 0 :(得分:6)

使Value()成为A中的纯虚函数(也添加虚拟析构函数):

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

答案 1 :(得分:1)

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

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

virtual int Value() = 0;

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

答案 2 :(得分: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;
}:

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

答案 3 :(得分:0)

请改为:

B* b = new B();

如果您需要B的功能,请B