virtual-method

    4熱度

    2回答

    我知道在基類的構造函數中 - 調用虛方法時 - 調用基方法,而不是派生 - 請參閱Calling virtual functions inside constructors。 我的問題與此主題有關。我只是想知道如果我在Derived類的構造函數中調用virtual方法會發生什麼 - 但是在構造Base部分之前。我的意思是打電話來評估基類構造函數參數的虛方法,見代碼: class Base { p

    4熱度

    2回答

    即使當前實例是派生類,我們如何從基類中的另一個方法調用虛方法? 我知道我們可以從派生類中的方法,通過使用base.Method2()調用方法二在的基地類,但我想要做的就是從其他虛擬方法調用它在基地類。可能嗎? using System; namespace ConsoleApplication1 { class Program { static void Mai

    2熱度

    2回答

    我有一個C++基類,它聲明瞭兩個不同的簽名的虛擬方法。 只要我重寫派生類中的虛擬方法簽名之一,編譯器(g ++ 4.6.3和g ++ 4.7)就不能再將該方法與同一派生類中的第二個簽名進行匹配。 下面的示例代碼將無法編譯,如果我只定義SPECIALIZE_ONEARG 1。爲了得到它的重新編譯我還必須定義PASSTHRU_TWOARG 1。使用「中繼」的方法,因爲效率不理想因爲真正的類層次結構的要

    8熱度

    6回答

    我有一堆系統,我們打電話給他們A, B, C, D, E, F, G, H, I, J。 它們都有類似的方法和屬性。有些包含完全相同的方法和屬性,有些可能略有不同,有些可能會有很大差異。現在,我爲每個系統都有很多重複的代碼。例如,我有一個爲每個系統定義的名爲GetPropertyInformation()的方法。我試圖找出哪一種方法是減少重複的代碼或以下方法也許一個最好的辦法是不是要走的路: 接口

    1熱度

    3回答

    考慮下面的代碼: class Base { protected: virtual void methodDefinedInBase() = 0; } Class Derived: private Base { public: void someMethod(); protected: virtual void methodDef

    3熱度

    2回答

    有一個little related question。但話題完全不同。 現在,一個概念是關於功能分辨率和另一個是關於class分辨率?我想知道如果他們使用相同的vtable(at least in gcc-4.5)怎麼可能?這是一個與編譯器相關的術語嗎? 我知道這可能是一個基本的愚蠢問題,但我從來沒有想過它。

    4熱度

    5回答

    假設這個結構 struct InterfaceForFoo { virtual void GetItDone() = 0; }; class APoliticallyCorrectImplementationOfFooRelatedThings : private InterfaceForFoo { public: void GetItDone() {

    10熱度

    3回答

    我有一個類模板,其中一些方法被定義爲虛擬的,以使我的類的用戶能夠在他的派生類中爲他們提供實現。請注意,在我的模板類中,有一些使用虛擬類的非虛擬方法(應該返回值的虛擬類在非虛擬類中調用)。 你可以給我一個正確的代碼,其中父類的虛擬方法應該返回一個值(但它的實現是在一個子類中提供的)和父類中的虛方法返回的值的簡單示例用於該類的其他方法。因爲我看到某處(例如:Safely override C++ vi

    1熱度

    2回答

    在實現它的類中定義具有與接口方法完全相同的簽名的靜態方法的優點是什麼? class IInterface { public: virtual void fn()=0; } class Impl :IInterface { public: ~Impl(); static void fn(); } Impl::~Impl{ } Impl::fn(

    1熱度

    1回答

    我正在使用boost python創建一個綁定到C++庫。該庫中的許多類都具有接受iterator/const_iterator類型作爲參數的虛方法。我並不特別想公開這些類型,但寧願在接受適當容器的虛擬方法周圍創建一些包裝。我的問題是,在'默認實現'功能中做這個包裝是否安全? 例如 class Test { public: Test(); virtual ~Test();