我的接口層次結構如下:充分利用層次的界面接口
class interface1
{
public:
virtual ~interface1() = 0;
}
class interface2 : public interface1
{
public:
virtual ~interface2() = 0;
}
我的數據模型有一個既可以從接口1或接口2派生類:以
class cls1 : public interface1
{
}
class cls2 : public interface2
{
}
我想寫一個超載的功能,可以在接口1或接口2上工作
void function1(interface1 * obj)
{
// do something here
}
void function1(interface2 * obj)
{
// do something here
}
現在我想同時創建的對象 - CLS1和CLS2,並調用功能1:
{
.........
cls1 *p1 = new cls1;
cls2 *p2 = new cls2;
function1(p1);
function1(p2);
.........
}
我的問題是 - 在這兩種情況下,功能1(接口1 * OBJ)總是調用。我不想使用if-else與dynamic_cast結合(這是創建接口層次結構的關鍵)。 任何人都可以建議我調用function1(interface2 * obj)與cls2的對象?
在一個不相關的音符,你的析構函數似乎缺少了'virtual'關鍵字。 – PaF
我無法重現您的問題。如果應用了明顯的修復,但是完全相同的代碼,gcc使用相應的函數[如預期](http://ideone.com/a4H0dm)(ideone.com) – user2079303
@PaF:是的,謝謝!更正! – vckane