4運算符重載
4.1對一個運算符重載本質上就是編寫函數,只不過這個函數的名稱必須以operator關鍵字開始,然後跟隨被重載運算符。也就是說,我們需要編寫的函數原型(運算符重載函數)必須符合如下的規則:
函數返回值類型 operator 被重載的運算符(函數參數列表)
另外要注意以下幾點:
(1)只能重載C++中原先已有定義的運算符。比如,C++中的 ”**“ 這個運算符就不能重載
(2)”.“ ".*" "::" "?:" 和 sizeof 這5個運算符不允許被重載。除這5個運算符除外,其他已有定義的C++運算符都可以被重載。
(3)不能改變運算符的操作數個數,比如,對於彈幕運算符,它只能有一個操作數。
(4)不能改變運算符原有的優先級。
(5)不能改變運算符原有的結合性。
(6)不能改變運算符對C++內部那些預定義數據類型的操作方式。
4.2類型轉換函數
用構造函數實現類型轉換
爲了用構造函數來實現類型轉換,類內至少必須定義一個只帶一個參數的構造函數,該構造函數將參數類型轉換爲該類的類型。當需要轉換時,系統會自動調用該構造函數,創建該類的一個臨時對象,該對象由被轉化的初始化,從而實現轉換。
類型轉換函數
源類::operator 目標類()
{
...
return 類型爲目標類型的變量或者常量
}
例如,要實現將一個複數類轉爲double類型,且這個double類型的數據等於複數的模,那麼可以向前面的複數類中添加如下的轉化函數。
CComplex::operator();
在CComplex.cpp文件中添加如下的實現代碼:
CComplex::operator double(){
double x = sqrt(m_Re*m_Re+m_Im*m_Im);
return x;
}
有了上面的轉換函數後,可以將一個複數轉換爲一個double類型的數據。下面時示例代碼:
main(){
CComplex c(1.0,2.0);
double x=c;
cout<<x<<endl;
}
5繼承
在繼承的概念中,用戶利用已有的數據類型定義出新的數據類型,在新的數據類型中,不但擁有新的數據成員和成員函數,而且同時擁有記得數據類型中的數據成員和成員函數。在面向對象程序設計中,我們稱被繼承的類爲基本類,而經由繼承關係而定義出來的類爲派生類。基本類也稱父類,而派生類也成爲子類。
5.1派生類的定義
通過繼承基本類設計派生類的語法格式如下:
class 派生類名稱 :訪問權修飾符(public protected 或private)基本類名稱
{
...
};
5.2派生類設計
包括派生類成員的定義與使用
派生類構造函數的設計
派生類析構函數的設計
5.3程序的擴展
分爲單一繼承與多重繼承