2
struct struct1
{};
struct struct2:public struct1
{};
class Base
{
public:
virtual void foo(struct1 *s)
{
cout<<"foo in Base"<<endl;
}
};
class Der:public Base
{
public:
virtual void foo(struct2 *s)
{
cout<<"Foo in Der"<<endl;
}
};
int main()
{
struct2 s;
Base *b = new Der();
b->foo(&s);
}
當我在main調用函數時它調用Base中的成員,打印出「Base中的foo」。當Derived類函數採用struct1指針時,它在Der中打印「foo」。但是,有什麼辦法讓它走struct2指針,並顯示「富在明鏡」覆蓋繼承結構的函數
由於Der中的成員函數foo使用不能接受struct1指針的struct2指針,Liskov替換原則失敗了嗎? – sajas 2013-02-23 09:11:30
@sajas:是的,LSP要求你應該能夠用派生類型替換對基的任何使用。在這種情況下,無法完成,因爲基類的使用(尤其是調用具有不是'struct2'的struct1'對象的'foo')不適用於派生類型,因此,你不能用派生類型替換基類。 – 2013-02-24 03:37:32