C++避免手动调用基类函数
C++ avoiding manually calling base class function
我有一组这样的类:
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
}
};
这就是所谓的非虚拟接口习惯用法。
相关文章:
- 使用基类指针调用基类的值构造函数的语法是什么?
- 在初始化列表之外手动调用基类的构造函数
- 继承:调用基类的成员和方法
- 在成员构造函数之后调用基类构造函数
- C++初始化之前派生类调用基类的方法
- 如何在具有相同函数名称的派生类中调用基类的函数
- 有没有办法在C++中调用基类的所有子类函数?
- C++:在派生类成员上调用基类方法
- 添加字符串类型的类成员会导致调用基类函数而不是子函数
- 有没有办法调用基类函数,该函数在使用私有继承的派生类中被覆盖?
- 如何在C++中调用基类虚函数
- 如何让派生类在调用基类之前执行操作?
- 在调用基类之前需要在成员上调用方法
- 调用基类克隆实现
- 在派生类中调用基类方法,而无需指定基类名称
- 从参数包中派生的调用基类运算符 =
- 当应该调用派生类方法时,为什么要调用基类方法
- 调用基类函数时强制使用类名?
- 无法从派生的一个方法调用基类方法
- 当派生类无法轻易将参数传递到基类时,如何调用基类构造函数