class Foo
{
public:
void action();
};
class Bar : public Foo
{
public:
void action();
};
void Foo::action ()
{
cout << "parent\n";
};
void Bar::action ()
{
cout << "child\n";
};
int main()
{
Foo* foo = new Bar ();
foo->action(); // returns "parent" - "child" expected
return 1;
}
对于一个可能微不足道的问题我感到抱歉,但我是C ++的新手...... 'foo'指针必须指向Foo类的一个实例,因为它可以是Foo的任何子节点,例如Bar,Bar1,Bar2,Bar3等。
同时'foo-&gt; action()'应该运行子项的重写函数。 请告诉我,如何更正代码以达到我的目标... 谢谢!
答案 0 :(得分:2)
将关键字virtual
用于父类功能。而且,您的父类应该有virtual destructor
。
class Foo
{
public:
virtual void action();
};
class Bar : public Foo
{
public:
void action();
};
void Foo::action ()
{
cout << "parent\n";
};
void Bar::action ()
{
cout << "child\n";
};
int main()
{
Foo* foo = new Bar ();
foo->action(); // returns "parent" - "child" expected
return 1;
}
答案 1 :(得分:2)
需要声明成员函数virtual
(例如,与Java不同,所有方法都隐式virtual
):
class Foo
{
public:
virtual void action();
};
答案 2 :(得分:2)
与其他语言(如Java)不同,在C ++基类中必须使用关键字virtual