C/C++ 一點筆記(2)

來源:互聯網
上載者:User

繼承和派生:

(1)子類不加修改的延續父類的特徵,我們把它叫做繼承。

(2)在原有基礎上建立新類並且添加新新征的過程叫做“類的派生”。

(3)把原有的類叫做“基類”,又叫“父類”,把建立的類叫做“衍生類別”,又叫子類。

         例如:class Son : public Father

(4)公有派生的公有成員仍然為公有成員;公有派生的保護成員仍然為保護成員;公有派生的私人成員是不能為派生訪問的。

(5)私人繼承:class Son : private Father

       私人方式派生的子類,父類的公有和保護成員在子類中是私人的,而私人成員是不可訪問的;由於私人派生不利於繼續派生,所以實際中用的不多。不管以僅有還是私人形式繼承,基類的私人成員在衍生類別都是不可訪問的。

(6)單一繼承:只有一個基類

       多重繼承:擁有多個基類(C#中沒有多重繼承)

       例如:class Son : public Father,public Mother

(7)子類調用順序:構造父類對象→構造子類對象→析構子類對象→析構父類對象

        當一個類中的包含子物件時,建構函式的調用 順序是先調用子物件的建構函式(按照它們在類定義時出現的順序,而不是按照構造列表中出現的順序),然後再調用當前對象的建構函式代碼,調用解構函式的順序與構造的順序剛好相反。

 

虛函數:

(1)在不使用virtual之前,C++對重載的函數使用靜態聯編,而使用virtual以後,C++則對該函數進行動態聯編。

(2)靜態聯編是指聯編工作出現在編譯串連階段,這種聯編又稱早期聯編,它解決了程式中的調用與執行該作業碼間的關係。在編譯時間所進行的這種聯編又稱靜態束定,在編譯時間就解決了程式中操作調用與執行該作業碼的關係。對於靜態聯編來說。由於已經確定了調用和被調用間的關係。對於靜態聯編來說,由於已經確定了調用和被調用的關係,因此代碼在編譯時間與執行時的效果都是一樣的。

(3)在程式執行時進行聯編工作的被稱為動態聯編,或稱動態束定,又叫晚期聯編。

(4)假如在虛函數中沒有採用指標或者引用,那麼就無法實現動態聯編。

(5)在虛函數中使用成員名限定(例如:A::get)可以強行解除動態聯編。

 

虛解構函式:

(1)一個衍生類別對象在建立時首先會調用基類的建構函式,然後調用該類的建構函式。一般情況下,在使用虛函數的時候,我們都會將派生對象的的指標傳遞給指向基類的指標,那麼假如指向衍生類別的對象的指標刪除時會發生什麼情況呢?如果解構函式是虛函數,那麼就會進行正確的操作,它會先調用衍生類別的解構函式,由於一般情況下任何類的解構函式都可以聲明為虛解構函式,當指標刪除時,系統就會獲得對象進行時的類型並調用正確的解構函式。

(2)由於解構函式不允許帶有參數,因此它不可能實現重載,那麼一個類就只能有一個虛解構函式。

(3)只要基類的解構函式被說明為虛解構函式,那麼衍生類別的解構函式無論說明與否,都自然成為虛解構函式。

(4)在C++中虛建構函式是不存在的,因此也無法聲明。

(5)如果基類中定義了虛函數,解構函式也應說明為虛解構函式,這樣對記憶體的回收會更準確些。

 

函數模板(STL的基礎)

(1)看下列例子:求絕對值的例子

int abs(int x)
{
return x<0?-x:x;
}

double abs(double x)
{
return x<0;-x:x;
}

      這兩個函數除了參數類型不同,功能完全一樣,這個時候,就可以把這些功能相同、參數類型不同的函數抽象成一個模板,這就是函數模板。

      函數模板的定義形式:template <typename 標識符>,關鍵字typename,也可以由關鍵字class代替函數定義部分。

     所以上面求絕對值可以寫成:

template <typename T>
T abs(T x)
{
return x<0?-x:x;
}

     注意:編譯器會在函數調用時推匯出函數模板的參數類型。記住是在編譯時間就已經推匯出參數類型的代碼,而不是在運行時才推導參數類型。

    下面是一個完整的函數模板應用的例子:

template <class T>
T abs(T x)
{
return x<0 ? -x : x;
}

template <class T> T max(T tl,T t2)
{
return (t1 > t2) ? t1 : t2;
}

int main()
{
int a=-1;
int b=-2;
int c

abs(a);
abs(b)
c=max(a,b);

return 0;
}

 

  相關文章:

        •  C/C++ 一點筆記(1)

        •  C/C++ 一點筆記(2)

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.