1. 程式人生 > >【筆記】C++中一些易混淆的知識點

【筆記】C++中一些易混淆的知識點

Note

文章的知識點基本來自於《C++ Primer》,其中的觀點可以看作是對原文的翻譯

Public,Protected,Private三種繼承方式

派生類在繼承列表中通過在基類名字前加上許可權標籤來確定繼承方式。

class Derived:Public Base {
};

class預設Private方式繼承,struct則是Public。
被繼承元素的訪問許可權是由基類中的標籤和派生類的繼承列表中的許可權標籤共同決定的。
被繼承元素在派生類中的訪問許可權只能夠更嚴格。
1)Public:保持在基類中的許可權
2)Protected:Public->Protected,Protected不變
3)Private:全部變成Private成員
如果想讓某一元素例外,可以使用using。下面的程式碼中,雖然以Private方式繼承Base,卻保持了其Public屬性。

class Base {
public:
    int base_val;
};
class Derived:Private Base {
public:
    using Base::base_val;
};

利用size_type和size編寫列印容器元素的模板

我們可能一開始會寫出這樣的程式碼

for ( T::size_type i = 0; i < x.size(); ++i )

不過,編譯器會假定 T::size_type 是資料成員而產生編譯錯誤。必須告訴它。

template<typename T> void d_print( const
T& x ) { for ( typename T::size_type i = 0; i < x.size(); ++i ) cout << x[i] << ' '; cout << endl; }