【发布时间】:2011-07-16 09:23:19
【问题描述】:
我很好奇是否有一种巧妙的方法可以在派生接口的基类中公开方法。
所以在代码中:-
class cbase {
public:
void MyMethodA() { }
};
class cderived : public cbase {
public:
void MyMethodB() { }
}
class ibase {
public:
virtual void MyMethodA() = 0;
};
class iderived : public ibase {
public:
virtual void MyMethodB() = 0;
};
现在如果我让 cbase 继承 ibase,而 cderived 实现 iderived,编译器会抱怨当我实例化 cderived 时,MyMethodA() 是抽象的,没有实现。
MyMethodA() 在基类中通过 ibase 实现。解决这个问题的唯一方法是在 c 派生类中重新实现 ibase 的方法吗?如果是这样,糟糕!
如下:-
class cbase : public ibase {
public:
void MyMethodA() { }
};
class cderived : public cbase, public iderived {
public:
void MyMethodA() { cbase::MyMethodA(); }
void MyMethodB() { }
};
cderived inst;
iderived *der = &inst;
der->MyMethodA();
der->MyMethodB();
ibase *bas = der;
bas->MyMethodA();
我希望这足以传达问题。 :) 当我们试图重构旧代码时,这听起来可能有点循环。
我相信那里有很多热切的评论;)
【问题讨论】:
标签: c++ inheritance