通常,我們希望使用私有繼承來將實現細節隱藏到基類中。如果是這樣, 1)爲什麼名稱公佈功能又出現了?僅僅是爲了語言的完整性還是有實際用法呢? 2)即使我公開基類函數名,派生類仍然可以聲明具有相同名稱的另一個函數。請考慮下面的代碼。 #include "iostream"
using namespace std;
class Base {
public:
int zoo;
,請參見下面的代碼 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是
讓我們考慮兩個類A和B具有以下接口: class A {
public:
virtual void start() {} //default implementation does nothing
};
class B {
public:
void start() {/*do some stuff*/}
};
,然後第三類來自繼承,A公開,因爲它實現了這個「接口
在私有繼承的基類對象和子對象之間有以下三種類型轉換,其中兩種工作,但最後一種不支持。我想知道是什麼導致了不同的結果。 #include<iostream>
#include <string>
using namespace std;
class test :private string
{
public:
test(string st) :string(st){}
v