我学习了虚函数的工作:如果继承的类从基类继承一个函数,并且每个函数都是自定义的,我可以用指向基类的指针调用这些函数,这样:
BaseClass* PointerName = &InheritedClassObject;
但是变量呢?我在网站上发现了这个问题:我无法在 C++ 中创建虚拟变量。我的经验证明了这一点:对于变量,Visual C++ 说:'virtual' is not allowed。
那么,使用基类指针获取属于继承类的(n 个继承的)变量的值的方法是什么?
我学习了虚函数的工作:如果继承的类从基类继承一个函数,并且每个函数都是自定义的,我可以用指向基类的指针调用这些函数,这样:
BaseClass* PointerName = &InheritedClassObject;
但是变量呢?我在网站上发现了这个问题:我无法在 C++ 中创建虚拟变量。我的经验证明了这一点:对于变量,Visual C++ 说:'virtual' is not allowed。
那么,使用基类指针获取属于继承类的(n 个继承的)变量的值的方法是什么?
你没有。虚函数使用它们,做任何需要做的事情并在需要时返回结果。
根据您的评论,我认为您想问的是子类是否如何访问其父类的变量。考虑这个例子:
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
,它会掩盖x
in Parent
。所以,如果你想得到 x in Parent
,你需要:Parent::x
。要简单地x
从 a中获取Child c
,您可以使用c.x
if x
ispublic
或使用 getter if x
is protected
or private
:
int Child::getNum()
{
return num;
}
如果将继承类转换回基类,则不能使用任何函数、数据成员。但是,您可以使用虚拟函数更改这些变量。例子:
#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的变量。