天天看點

[C++ 面試基礎知識總結] 類[C++ 面試基礎知識總結] 類

參考書籍:《c++ primer》

<a href="#c-%e9%9d%a2%e8%af%95%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e6%80%bb%e7%bb%93-%e7%b1%bb">c 面試基礎知識總結 類</a>

<a href="#%e7%9b%ae%e5%bd%95">目錄</a>

<a href="#%e7%b1%bb%e7%9a%84%e5%9f%ba%e7%a1%80">類的基礎</a>

<a href="#%e6%88%90%e5%91%98%e5%87%bd%e6%95%b0">成員函數</a>

<a href="#%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0">構造函數</a>

<a href="#%e8%ae%bf%e9%97%ae%e6%8e%a7%e5%88%b6%e5%92%8c%e5%b0%81%e8%a3%85">通路控制和封裝</a>

<a href="#%e5%8f%8b%e5%85%83">友元</a>

<a href="#%e5%90%8d%e5%ad%97%e6%9f%a5%e6%89%be%e4%b8%8e%e7%b1%bb%e7%9a%84%e4%bd%9c%e7%94%a8%e5%9f%9f">名字查找與類的作用域</a>

<a href="#%e7%b1%bb%e7%9a%84%e9%9d%99%e6%80%81%e6%88%90%e5%91%98%e4%b8%8e%e6%99%ae%e9%80%9a%e6%88%90%e5%91%98">類的靜态成員與普通成員</a>

在成員函數中,可以直接通路資料成員,而在這個過程中實際上隐式地使用了一個名為this的隐式指針,該指針指向正是這個類對象。

重點注意:在語句<code>string getname() const{return name;};</code>中,const修飾的是this指針,在這裡,this指針的預設類型為<code>people *const</code>,為指向非常量類型的常量指針。在函數後加上const聲明,可以将this指針聲明為<code>const people *const</code>類型。這裡如果不加const聲明的話,将會報錯,因為類對象p是一個常量。

成員函數也可以在類外部定義,需要加上作用域運算符:

如果類沒有聲明任何構造函數,就會合成預設的構造函數。如果需要預設構造函數,需要定義。

一旦定義構造函數,就不會自動生成預設構造函數

使用預設構造函數時要注意去掉對象名後的空括号對。

構造函數有一個隐式轉換的規則,例如people類定義了一個接受string類型的構造函數,就可以在需要使用people的時候用string代替。

但是編譯器隻會自動地執行一步類型轉換。

如果不想通過構造函數,隐式地轉換類,可以在構造函數前加上關鍵字explicit。然後就隻能使用強制轉換的方式了。

在c++中,class和struct唯一差別是,class中成員預設是private的,struct中成員預設是public。

以上三個類完全一樣。

可以通過設定友元的方法來讓其他函數通路類的私有成員。

也可以設定其他類為類的友元。

也可以隻讓do的成員函數setage()成為people類的友元

成員函數中使用的名字按照如下方式解析:

1.首先在成員函數内查找該名字的聲明,隻有在函數使用之前出現的聲明才考慮。

2.如果成員函數内沒有找到,則在類内繼續查找,這時類的所有成員都可以被考慮。

3.如果類内也沒有找到該名字的聲明,在成員函數定義之前的作用域内查找。

靜态成員可以是不完全類型。

靜态成員可以用作預設實參

繼續閱讀