我有这样的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 ?
}
感谢您的帮助。
答案 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
。