1
、概念定義:(友元函式、友元類)
(1)友元是一種允許非類成員函式訪問類的非公有成員的一種機制。
(2)可以把乙個函式指定為類的友元,也可以把整個類指定為另乙個類的友元。
2、友元函式:
(1)該函式不是類的一部分,但又需要頻繁地訪問類的資料成員。
(2)友元函式在類作用域外定義,但它需要在類體中進行說明。
(3)為與該類的成員函式區別,定義方式是在類中用關鍵字friend說明該函式,格式如下:
friend 型別友元函式名(參數列);3
、友元作用:提高程式的執行效率(即減少了型別和安全性檢查及呼叫的時間開銷)。 4
、友元函式注意事項:
(1)友元函式不是類的成員函式,在函式體中訪問物件的成員,必須用
物件名加運算子加物件成員名
。但友元函式可以
訪問類中的
所有成員
(公有的、私有的、保護的),一般函式只能訪問類中的公有成員。
(2)友元函式不受類中的訪問許可權關鍵字限制,可以把它放在類的公有、私有、保護部分,但結果一樣。
(3)某類的友元函式的作用域並非該類作用域。如果該友元函式是另一類的成員函式,則其作用域為另一類的作用域,否則與一般函式相同。
(4)友元函式破壞了物件導向程式設計類的封裝性,所以友元函式如不是必須使用,即
盡可能少用
,或者用其他手段保證封裝性。 5
、友元類注意事項:
(1)友元關係是單向的;(2)友元關係不能被傳遞;(3)友元關係不能被繼承。
6、友元成員函式使用示例:
#includeusing namespace std;
class date;//對date類的提前引用宣告
class time
;class date
;time::time(int h, int m, int s)
void time::display(date &d)//display的作用是輸出年月日,時分秒
date::date(int m, int d, int y)
int main(void)
1、運算子過載的作用:
(1)直觀自然,可以提高程式的可讀性;(2)體現了c++的可擴充性;
(3)運算子過載僅僅只是語法上的方便,它是另一種函式呼叫的方式;
(4)運算子過載,本質上是函式過載。
2、運算子過載的實現:
(1)成員函式過載:
成員函式原型的格式:函式型別operator運算子(參數列);(2)友元函式過載:成員函式定義的格式:
函式型別類名::operator運算子(參數列)
友元函式原型的格式:friend函式型別operator運算子(參數列);(3)成員函式過載和友元函式過載的選擇:友元函式定義的格式:
friend函式型別類名::operator運算子(參數列)
① 一般情況下,單目運算子最好過載為類的成員函式;雙目運算子則最好過載為類的友元函式。
③ 型別轉換運算子只能以成員函式方式過載。
④ 流運算子(輸入輸出<>)只能以友元的方式過載。
(4)注意事項:
① 運算子過載不允許發明新的運算子。
② 不能改變運算子操作物件的個數。
③ 運算子被過載後,其優先順序和結合性不會改變。
④ 不能過載的運算子(見下)。
3、使用示例:
#include#includeusing namespace std;
using p_func = int (*)(int,int);
int count = 0;
class test
static int add(int a, int b)
friend int operator+(const test &t1, const test &t2);
friend ostream & operator<
friend istream & operator>>(istream &in, test &t);
operator int()
operator p_func()
test & operator=(const test &other)
test & operator++(int) //i++
test & operator++() //++i 不產生臨時物件,節省開銷,推薦使用
~test()
int num;
};int operator+(const test &t1, const test &t2)
ostream & operator<
istream & operator>>(istream &in, test &t)
int main()
嵌入式物件導向程式開發(1)
d2.26 嵌入式物件導向程式設計 嵌入式linuxc 開發 學習內容 c c with class 95 c中學過的資料型別 基本控制語句 函式 關鍵字 位運算 指標 陣列 1 c到c 公升級 語法公升級 2 c 物件導向的三大特點 封裝 繼承 多型 3 c 模板 4 c 異常處理 5 c 檔案處...
嵌入式物件導向程式開發(5)
五 深拷貝與淺拷貝 1 淺拷貝 對基本型別資料以及簡單的物件直接複製記憶體的拷貝。但是,當類的成員包含指標的時候,使用淺拷貝是將拷貝物件的位址賦值給了新的物件,導致兩個指標指向了同一塊記憶體空間,這時候淺拷貝就不能滿足實際要求了,需使用深拷貝。示例 test const test other m i...
嵌入式物件導向程式開發 C 模板
概述模板是一種引數化的多型工具。所謂引數化的多型性,是指將程式所處理的物件的型別引數化,使一段程式 可以用於處理多不同型別的物件。採用模板程式設計,可以為各種邏輯功能相同而資料型別不同的程式提供一種 共享的機制。1 函式模板 1 一般說明形式 template 模板形參表 返回值型別函式名 模板函式...