滿足多型的操作符過載

2021-08-25 15:04:45 字數 924 閱讀 4911

操作符過載本身實現並不困難,例如

class a

friend ostream& operator<<(ostream& os,const class a& a);

os<<"value"int value;

};但是如果a派生了新的類,為了能讓同乙個輸出操作符自動識別繼承自a類的物件並使用恰當的輸出方式,則可以給基礎類乙個抽象的方法,派生類重寫這個方法而達到針對不同的物件在執行時使用不同的輸出格式.由於輸出操作符不可以為抽象的,所以可以在不改變基類的這個公共介面的前提下另寫乙個實現輸出的抽象成員方法print(),讓輸出操作符去呼叫這個方法.這樣以來每派生乙個類,則只需要修改其重寫的print()方法即可.所以新的a類應該是

class a

friend ostream& operator<<(ostream& os,const class a& a)

a.print(os);

return os;

private:

int value;

virtual void print() const;

};void a::print(ostream& os) const

os<<"value "}如果此時b類繼承了a類,則b的輸出操作符可以在不對a的設計進行任何更改的情況下簡單的實現.

b類的部分應該是如下的樣子

class b: public class a

private:

int number;

void print(ostream& os) const;

};void b::print(ostream& os) const

a::print(os);

os<<"number "《這裡的類都比較小,可以容易的看出當a,b類的輸出都不叫複雜的時候改動和更改都會比較方便.

思想方法來自<

操作符過載

ifndef vertex h define vertex h class vertex vertex float px float py float pz vertex operator const vertex p vertex operator const vertex p void oper...

操作符過載

1.操作符是靜態方法,返回值表示操作結果,引數是運算元。2.操作符過載需要在過載的操作符前加上operator關鍵字。3.最好少用操作符過載,只有在意義明晰而且與內建類的操作一致時才適合使用,以免造成混亂。以建立的分數類 fraction 中的 為例,該分數類中有兩個int型的私有屬性 分子 num...

過載操作符

1.過載操作符1.1 限制過載操作符具有以下限制 1 只有c 預定義的操作符集中的操作符才可以被過載 2 對於內建型別的操作符,它的預定義不能被改變,應不能為內建型別過載操作符,如,不能改變int型的操作符 的含義 3 也不能為內建的資料型別定義其它的操作符 4 只能過載類型別或列舉型別的操作符 5...