繼承 和static

繼承和多態

1。友元是不可以被繼承的:基類的友元不可以訪問派生類的成員;同樣,一個友元的派生類也不可以訪問定義友元的類。

2。除static成員外,每個派生類都保存了基類的一個副本,包括派生類不能訪問的 private成員;static在整個繼承層中只有一個,其訪問屬性跟其他成員一樣。

3。虛函數在本質上是語義上的完備性表現:作爲基類的成員卻可以能被派生類重新定義;當然也正因爲如此纔有了多態。

4。派生類的聲明不允許有繼承列表。

5。繼承是非自反的,也就是不能從自身繼承。

6。Constructors and the copy-control members are not inherited,A class may initialize only its own immediate base class.

7。派生類如果自己定義了拷貝構造函數和賦值運算,則基類的部分不會自動激發,需要顯示調用,如果派生類使用自定義的拷貝構造函數時沒有顯示調用基 類的拷貝構造函數,那麼基類會使用自己的默認構造函數來對基類部分的成員賦值;而析構函數一直激發基類的析構函數,也就是說派生類沒有必要對基類的成員進 行析構操作。
8。 一般不要override 非 virtual 成員函數,否則會產生二義性。(OOD)

9。一般不要overload virutal 函數因爲virtual函數只有一個virtual參數表。 (OOD)

10。析構函數應該經常被定義爲虛:我們使用一個基類的指針,顯然是可以動態綁定的,如果在運行時指針指向基類的一個派生類,當使用這個指針析構派 生類時會發生什麼呢?要析構首先要調用一個析構函數,根據多態的定義這個析構函數必須是基類基類部分的,因爲虛函數不可以被繼承,也因爲我們需要對派生類 做自己的清楚操作,所以在基類中的這個析構函數必須是虛的,故必須在基類中定義虛析構函數。

static

1.關鍵字static,friend,explicit,virtual只能出現在類體中,inline即可以出現在類體內,也可以出現在類體外,只要有一個出現就是內聯函數。

 (c++ primer)

A const static data member of integral type can be initialized within the class body as long as the initializer is a constant expression。

When a  const   static data member is initialized in the class body, the data member must still be defined outside the class definition。

When an initializer is provided inside the class, the definition of the member outside the class   must not specify an initial value。

 

非靜態成員函數可以任意地訪問靜態成員函數和靜態數據成員; 

 靜態成員函數不能訪問非靜態成員函數和非靜態數據成員.靜態成員函數的參數沒有this指針,也不可以是virtual函數。

說靜態成員不能被繼承,是因爲子類跟父類共享一份靜態成員,但子類使用正常方法仍然能夠訪問。

靜態全局變量不能被其它文件所用;其它文件中可以定義相同名字的變量,不會發生衝突;

在函數的返回類型前加上static關鍵字,函數即被定義爲靜態函數。靜態函數與普通函數不同,它只能在聲明它的文件當中可見,不能被其它文件使用。其它文件中可以定義相同名字的函數,不會發生衝突。

C++變量作用域可分爲6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章