如何从基类调用派生函数?我的意思是,能够将一个函数从基类替换为派生类。
实施例
class a
{
public:
void f1();
void f2();
};
void a::f1()
{
this->f2();
}
/* here goes the a::f2() definition, etc */
class b : public a
{
public:
void f2();
};
/* here goes the b::f2() definition, etc */
void lala(int s)
{
a *o; // I want this to be class 'a' in this specific example
switch(s)
{
case 0: // type b
o = new b();
break;
case 1: // type c
o = new c(); // y'a know, ...
break;
}
o->f1(); // I want this f1 to call f2 on the derived class
}
也许我采取了错误的做法。任何关于不同设计的评论也将受到赞赏。
答案 0 :(得分:20)
在基类中声明f2()virtual。
class a
{
public:
void f1();
virtual void f2();
};
然后,只要派生类重写f2()
,就会调用派生类最多的版本,具体取决于指针指向的实际对象的类型,而不是指针的类型。
答案 1 :(得分:5)
将f2()声明为virtual。