我学习了虚函数的工作:如果继承的类从基类继承一个函数,并且每个函数都是自定义的,我可以用指向基类的指针调用这些函数,这样:
BaseClass* PointerName = &InheritedClassObject;
但变量怎么样?我在网站上发现this question告诉我:我无法在C ++中创建虚拟变量。我的经验证明了这一点:对于变量,Visual C ++说:'虚拟'不允许。
那么,通过使用基类指针来获取属于继承类的(n继承)变量的值的方法是什么?
答案 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.x
为x
,则使用public
;如果x
为protected
则使用获取者}或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。