嵌入式物件導向程式開發 運算子過載

2021-10-05 04:16:44 字數 2530 閱讀 3230

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運算子(參數列);

成員函式定義的格式:

函式型別類名::operator運算子(參數列)

(2)友元函式過載:

友元函式原型的格式:friend函式型別operator運算子(參數列);

友元函式定義的格式:

friend函式型別類名::operator運算子(參數列)

(3)成員函式過載和友元函式過載的選擇:

① 一般情況下,單目運算子最好過載為類的成員函式;雙目運算子則最好過載為類的友元函式。

③ 型別轉換運算子只能以成員函式方式過載。

④ 流運算子(輸入輸出<>)只能以友元的方式過載。

(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 模板形參表 返回值型別函式名 模板函式...