1

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

BaseClass* PointerName = &InheritedClassObject;

但是变量呢?我在网站上发现了这个问题:我无法在 C++ 中创建虚拟变量。我的经验证明了这一点:对于变量,Visual C++ 说:'virtual' is not allowed

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

4

3 回答 3

1

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

于 2013-07-20T22:00:29.040 回答
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, 
}

注意:
如果你定义一个 x in Child,它会掩盖xin Parent。所以,如果你想得到 x in Parent,你需要:Parent::x。要简单地x从 a中获取Child c,您可以使用c.xif xispublic或使用 getter if xis protectedor private

int Child::getNum()
{
     return num;
}
于 2013-07-20T22:08:53.057 回答
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的变量。

于 2013-07-20T22:10:37.380 回答