程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第15章 面向對象編程(8)

第15章 面向對象編程(8)

編輯:C++入門知識

15.4 構造函數和復制控制
構造函數和復制控制成員不能繼承,每個類定義自己的構造函數和復制控制成員。
15.4.1基類構造函數和復制控制
某些類需要只希望派生類使用的特殊構造函數,這樣的構造函數定義為protected。
15.4.2 派生類構造函數
派生類的構造函數受繼承關系的影響,每個派生類構造函數除了初始化自己的數據成員之外,還要初始化基類。
1. 合成的派生類默認構造函數
派生類的合成默認構造函數與非派生的構造函數只有一點不同:除了初始化派生類的數據成員之外,它還初始化派生類對象的基類部分。基類部分由基類的默認構造函數初始化。
2. 定義默認構造函數
3. 向基類構造函數傳遞實參
派生類構造函數的初始化列表只能初始化派生類的成員,不能直接初始化繼承成員。相反,派生類構造函數通過將基類包含在構造函數初始化列表中間接初始化繼承成員。

class Base 

private: 
    int value1, value2; 
protected: 
    Base(int val1, int val2) 
    { 
        value1=val1; 
        value2=val2; 
    } 
}; 
 
class Child:Base 

private: 
    int value3; 
public: 
    Child(int val1,int val2,int val3):value3(val3),Base(val1,val2){} 
}; 
構造函數初始化列表為類的基類和成員提供初始值,它並不指定初始化的執行次序。首先初始化基類,然後根據聲明次序初始化派生類的成員。
4. 在派生類構造函數中使用默認實參
5. 只能初始化直接基類
一個類只能初始化自己的直接基類。直接基類就是在派生列表中指定的類。
重構包括重新定義類層次,將操作和/或數據從一個類移到另一個類。為了適應應用程序的需要而重新設計類以便增加新函數或處理其他改變時,最有可能需要進行重構。
構造函數只能初始化其直接基類的原因是每個類都定義了自己的接口。一旦類定義了自己的接口,與該類對象的所有交互都應該通過該接口,即使對象是派生類對象的一部分也不例外。
同樣,派生類構造函數不能初始化基類的成員且不應該對基類成員賦值。如果那些成員為public或protected,派生構造函數可以在構造函數函數體中給基類成員賦值,但是,這樣做會違反基類的接口。派生類應通過使用基類構造函數尊重基類的初始化意圖,而不是在派生類構造函數函數體中對這些成員賦值。

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved