重写扩展现有函数的方法



我有一个类Child,继承自类Parent。类Parent具有虚拟保护方法_parentClassMethod(int a, int b)。此方法用于类Child的方法:

void Child::_childClassMethod(int c, int d)
{
//some code
_parentClassMethod(int a, int b);
//some more code
}

我的问题是:在_parentClassMethod中,当从类调用时,我需要以不同的方式调用Child函数调用。我正在空白,但是除了重新定义课堂上的整个_parentClassMethod之外,还有更好的方法吗Child

父类方法的定义:

void Parent::_parentClassMethod(int a, int b){
//lots of other code
setSomethingFunction(val1, val2, val3);/*this function cannot be made virtual since it               writes to the eeprom of a device*/
//lot more code
}

如果要从子方法调用父方法,可以执行以下操作:

void Child::themethod(int c, int d)
{
Parent::themethod(c,d);
// ...
}

在父类中定义一个虚函数,并在子类中覆盖(感谢@k-ballo)它。

class base {
public:
virtual void f() { /* do parent thing */ }
void _parentClassMethod(int a, int b) {
// something
f();
// more stuff
}
};
class derived : public base {
public:
virtual void f() { /* do child thing */ }
};

有两种方法可以解决这个问题:

  1. 重写子类中的方法/函数。
  2. 定义一个开关,使其在父类的_parentClassMethod()中具有不同的行为

最好的方法是覆盖该函数。

我所说的第二种方法是:

void Parent::_parentClassMethod(int a, int b, int switchx)
{
switch(switchx){
case 0:
/*behave normally*/ break;
case 1:
/*behave abnormally*/break;
}
}

如果你不能覆盖setSomethingFunction(),那么只需覆盖_parentClassMethod()。

刚刚为此任务创建了一个设计模式:模板方法模式。

创建虚拟方法,调用您不想虚拟的方法:

class Parent {
virtual void _parentClassMethod(int a, int b);
protected:
virtual void _parentClassMethodSetSth(val1, val2, val3, ...)
{
setSomethingFunction(val1, val2, val3);
}
};
void Parent::_parentClassMethod(int a, int b){
//lots of other code
_parentClassMethodSetSth(val1, val2, val3);
//lot more code
}

并覆盖_parentClassMethodSetSth在孩子。

最新更新