private-inheritance

    25熱度

    5回答

    由於第三方庫的佈局,我有類似下面的代碼: struct Base { static void SomeStaticMethod(){} }; struct Derived1: private Base {}; struct Derived2: public Derived1 { void SomeInstanceMethod(){ Base::SomeS

    1熱度

    1回答

    我遇到以下情況的問題:庫(CardReader)實現了ISO7816協議並與智能卡(由我實現)進行通信。 我必須實現使用此庫的專有協議。 在CardReader中有以下類APDURequest和APDUResponse。 CardReader類實現了所有的功能來發送和接收這些消息。 class APDUResonse { public: /* ctor, copy ctor, mov

    3熱度

    1回答

    而當私有繼承必須使用而不是遏制,解釋,這article的作者說以下內容: 「我們需要之前構造使用的對象,或在摧毀它,另一個基地子對象。如果稍長對象的生命週期的問題,有沒有辦法把它比使用繼承」 其他如果你想子對象A到子對象B之前建造和B之後破壞,是不夠的聲明在B之前,在封閉課堂上?換句話說,爲什麼我們不能在這種情況下使用遏制來達到相同的結果?

    1熱度

    1回答

    爲什麼對象切片不發生在私有繼承中?在這種情況下,Static_cast會產生錯誤? 我明白,私有繼承不會在其繼承類之間保持「是 - 一種」關係。這是否與切片有關,因爲派生不是基類型的,因此編譯器強制不進行隱式轉換?

    1熱度

    1回答

    通常,我們希望使用私有繼承來將實現細節隱藏到基類中。如果是這樣, 1)爲什麼名稱公佈功能又出現了?僅僅是爲了語言的完整性還是有實際用法呢? 2)即使我公開基類函數名,派生類仍然可以聲明具有相同名稱的另一個函數。請考慮下面的代碼。 #include "iostream" using namespace std; class Base { public: int zoo;

    0熱度

    4回答

    在C++編程語言,第4版,第20.5.2節「訪問基類」(第592頁)中,它說(關於私有繼承):通過限制 接口到基定義一個類時,使得強的保證可以是 provided.For例如 私人的鹼是最有用的,B是一個指針ž.The矢量 的實現細節從第25.3節向其向量基地 添加類型檢查的模板是一個好的例子mple。 現在還不清楚Bjarne Stroustrup在這裏想說些什麼。如何才能通過將「接口」限制在基

    26熱度

    2回答

    ,請參見下面的代碼 struct A { using type = int; }; struct B : private A {}; struct C : B { using base_type = A; }; 所有GCC 6.1,鐺3.8和MSVC 2015年更新3拒絕編譯這一點,因爲A是不是因爲裏面C的訪問名稱A是B的私人基礎。看來gcc認爲A在using base_type = A是

    2熱度

    2回答

    我有一個問題。我在玩enable_shared_from_this,注意到一件奇怪的事情。這個例子正常工作: #include <iostream> #include <memory> using namespace std; struct Test : enable_shared_from_this<Test> { }; int main() { shared_ptr<

    4熱度

    2回答

    讓我們考慮兩個類A和B具有以下接口: class A { public: virtual void start() {} //default implementation does nothing }; class B { public: void start() {/*do some stuff*/} }; ,然後第三類來自繼承,A公開,因爲它實現了這個「接口

    3熱度

    1回答

    在私有繼承的基類對象和子對象之間有以下三種類型轉換,其中兩種工作,但最後一種不支持。我想知道是什麼導致了不同的結果。 #include<iostream> #include <string> using namespace std; class test :private string { public: test(string st) :string(st){} v