過載<<、>>運算子:
例如:ostream& operator<<(ostream&, const player& name);
其中:①ostream
類表示cout等,也支援寫入檔案的ofstream類。同理,也可以換位istream
、ifstream
類(但要把過載運算子也換為》);
②player&
表示類物件的引用,之所以用
const
進行限定,原因在於為了即可以支援被
const
限定的物件,也可以防止傳遞的引用被修改;
③假如類有返回需要值的類方法(例如某個函式返回某個私有成員),那麼就不必將其作為友元函式(獲得呼叫私有成員的許可權);否則,必須將其設定為友元函式;
④player
是類名。
轉換函式:
轉換函式有兩種形式:
①把非類物件(如基本型別)轉換為類物件;
②把類物件,轉換為基本型別。
關於第一種型別轉換,把非類物件轉換為類物件,是通過使用建構函式(只有乙個引數、或者其他引數都是預設引數時)。
例如,player a=5;
假如player
類有乙個建構函式:player(int ),
那麼其流程是這樣的:
建立乙個臨時物件(引數為5
,呼叫建構函式)——》採用逐成員複製的方式,將臨時物件賦值給物件a。
注意:在第二步逐成員複製的過程中,既不呼叫 複製建構函式(雖然他建立了乙個臨時物件給物件a
進行初始化)
,也不呼叫 賦值運算子(雖然有賦值符號,即使有
player& player::operator=(const
char*m)這樣的函式存在) ,呼叫的是符合條件的 建構函式 。
建構函式:初始化物件時,引數是非同類物件;
複製建構函式:初始化物件時,引數是同類物件(且只有乙個);
賦值運算子:非初始化時,遇見賦值符號使用。
另外提一下:
初始化物件的時候必然呼叫建構函式(如果引數是物件則呼叫複製建構函式);
在其他情況下,才會呼叫例如賦值運算子等。
關於第二種型別轉換,把類物件轉為非類物件。
假如有類物件player a;
使用int b=a;
時,將呼叫轉換函式。
轉換函式的格式為:operator 型別名(無引數);
例如:operator
int()
return id;
就是返回物件的私有成員id
的值,並將其傳遞給
int型別變數a。
另外,為了防止隱式自動應用轉換函式,可以將轉換函式/
建構函式加上關鍵字explicit(英文意思是顯式的),當這樣使用的時候,除非使用強制型別轉換,否則不會隱式的自動呼叫轉換函式/
建構函式,將類物件和基本型別之間互轉。
加關鍵字的例子如:
① explicit player(int a); ——建構函式加關鍵字
② explicit operator int(); ——轉換函式加關鍵字
強制型別轉換的方式有:
player a; int(a);————強制使用int
型別轉換函式
int a; player b= player(a); ——強制使用建構函式,將a
作為引數使用建立臨時物件。
建構函式使用new
的類:
如果類使用new
運算子來分配類成員指向的記憶體,在設計時應採用一些預防措施(因為編譯器無法幫你忙),預防措施有以下幾條:
①對於指向記憶體是由new
分配的每乙個類成員,都應該在析構函式使用
delete
依次釋放這些由
new分配的記憶體;
②如果析構函式使用delete
來釋放記憶體,那麼每個建構函式都應該使用
new來分配記憶體,或者指向空指標(
nullptr
,因為空指標可以被
delete);
③new
對應delete
、new
對應delete
,應該所有建構函式 和析構函式都應該統一;
④如果建構函式使用new
,那麼也應該定義乙個使用
new來分配記憶體的複製建構函式(這樣避免讓兩個物件的類成員指向同乙個記憶體位址);
⑤應定義乙個過載賦值運算子的類成員函式。其方法如下:
函式頭:類名&
類名::operator = (cosnt 類名& mm)
函式定義:防自己賦值自己——if( this==&mm) return *this;
指標——先delete
,再用new
分配記憶體,然後
strcpy
拷貝內容。
基本型別——按值傳遞
返回:*this
例如:
player& player::operator=(const player& mm)
(一三二)類的三種常見技術
過載 運算子 例如 ostream operator ostream const player name 其中 ostream 類表示cout等,也支援寫入檔案的ofstream類。同理,也可以換位istream ifstream 類 但要把過載運算子也換為 player 表示類物件的引用,之所以用...
mysql三種引擎 MySQL常見的三種儲存引擎
簡單來說,儲存引擎就是指表的型別以及表在計算機上的儲存方式。儲存引擎的概念是mysql的特點,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不同的儲存引擎決定了mysql資料庫中的表可以用不同的方式來儲存。我們可以根據資料的特點來選擇不同的儲存引擎。在mysql...
mysql三種引擎 MySQL常見的三種儲存引擎
原文連線 簡單來講,儲存引擎就是指表的型別以及表在計算機上的儲存方式。資料庫 儲存引擎的概念是mysql的特色,oracle中沒有專門的儲存引擎的概念,oracle有oltp和olap模式的區分。不一樣的儲存引擎決定了mysql資料庫中的表能夠用不一樣的方式來儲存。咱們能夠根據資料的特色來選擇不一樣...