C ++仮想テーブルのワンダフル使用

1.そこプロジェクトにおけるAインタフェースクラス


class Father{

    virtual string func1()=0;
};

2.その後、派生クラスがあります

class Son : public Father{
    virtual string func1(){return "func1";}

    //新增一个虚函数
    virtual string func2(){return "func2";}
};

3. Bは、工学的手法父fun2クラスAプロジェクトで必要とされるが、どのように行うには、仮想基底クラスの仮想メソッドを宣言しないのですか?
1.仮想基底クラスで宣言を追加します。(推奨)
2.(特別な事情がすることはできません次いで、動的サブクラスオブジェクトを使用して時間に換算される)方法1を使用して、派生クラスで仮想メソッドとして定義されます。

class user{

    void func(){
       Father* base = .....;//从接口中获得对象指针
       Son * imp = dynamic_cast<Son *>(base);
        imp->func2();//是可以的
    }
}

この操作はショーです。最初のオプションが一時的に利用できないときに、第2のオプションが使用されている。
func2の方法は、仮想追加していない場合は、リンクシンボルが失敗しているため、コンパイラが発見されることはありません。
仮想と組み合わせると、実際の点の後に記載した方法は、実行時に定義されている。
オブジェクト内の仮想関数テーブル内の実際の操作は非常に関数func2であることが可能である。
仮想基本クラスをバイパス完成....

おすすめ

転載: www.cnblogs.com/skyhuangdan/p/12560956.html