使用基类指针到达继承的变量

时间:2013-07-20 21:56:28

标签: c++ oop pointers inheritance virtual-functions

我学习了虚函数的工作:如果继承的类从基类继承一个函数,并且每个函数都是自定义的,我可以用指向基类的指针调用这些函数,这样:

BaseClass* PointerName = &InheritedClassObject;

但变量怎么样?我在网站上发现this question告诉我:我无法在C ++中创建虚拟变量。我的经验证明了这一点:对于变量,Visual C ++说:'虚拟'不允许

那么,通过使用基类指针来获取属于继承类的(n继承)变量的值的方法是什么?

3 个答案:

答案 0 :(得分:1)

你没有。虚函数使用它们,做任何需要做的事情并在需要时返回结果。

答案 1 :(得分:1)

根据你的评论,我想你想知道孩子班如何访问他们父母的变量。考虑这个例子:

class Parent 
{
public:
  Parent(): x(0) {}
  virtual ~Parent() {}

protected:
  int x;
};

class Child: public Parent
{
public:
  Child(): Parent(), num(0) {}

private:
  int num;
};

void Child::foo() 
{
  num = x; //Gets Parent's x, 
}

注意:
如果您在Child中定义x,则会屏蔽x中的Parent。因此,如果您想在Parent中获取x,则需要:Parent::x。要简单地从x获取Child c,如果c.xx,则使用public;如果xprotected则使用获取者}或private

int Child::getNum()
{
     return num;
}

答案 2 :(得分:1)

如果将继承的类的数据成员转换回基类,则不能使用它。但是,您可以使用虚函数更改这些变量。例如:

#include <iostream>

class BaseClass {
public:
  BaseClass() {}
  virtual void do_smth() = 0;

private:
};

class InheritedClass: public BaseClass {
public:
  InheritedClass(): a(1) {}
  virtual void do_smth() { std::cout << ++a << std::endl; }
private:
  int a;
};

int main() {
  BaseClass* ptr = new InheritedClass();
  ptr->do_smth();
  return 0;
}

在这段代码中,虚函数确实变量属于InheritedClass。