我有一组这样的类:
class A {
public:
int DoIt() {
//common code
}
};
class B : public A {
int DoIt() {
if (A::DoIt() == 1) {
return 1;
}
else {
// do b specific code
}
}
};
class C : public A {
int DoIt() {
if(A::DoIt()==1) {
return 1;
}
else {
// do c specific code
}
}
};
有没有一种方法可以避免手动放置以下代码:
if (A::Doit() == 1) { return 1; } else {
在每个派生自A的类中?
最佳答案
只需将特定的代码与另一个方法虚拟方法分开即可。
class A
{
public:
int DoIt() /*final*/
{
// common code
if (return_value == 1)
return 1;
else
return DoIt_specific();
}
private:
virtual int DoIt_specific() = 0;
// ^ or some "A"-specific actions if A cannot be abstract.
};
class B : public A
{
virtual int DoIt_specific() /*override*/
{
// specific code for B
}
};
这就是non-virtual interface惯用语。
关于c++ - C++避免手动调用基类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9689074/