今天在寫程式中用到了運算子過載,為了方便地輸出vector容器中的元素,我過載了《運算子。我是這麼寫的:
templatestd::ostream &operator <<(std::ostream &s,const std::vector&v)為在程式中呼叫該函式,則相應的主調函式的呼叫點處,直接以變數作為實參進行呼叫即可,而不需要實參變數有任何的特殊要求。如:對應上面定義的swap函式,相應的主調函式可寫為:
main( )
float &fn2(float r) //定義函式fn2,它以引用方式返回函式值
void main() //主函式
} (5)在另外的一些操作符中,卻千萬不能返回引用:+-*/ 四則運算符。它們不能返回引用,effective c++[1]的item23詳細的討論了這個問題。主要原因是這四個操作符沒有side effect,因此,它們必須構造乙個物件作為返回值,可選的方案包括:返回乙個物件、返回乙個區域性變數的引用,返回乙個new分配的物件的引用、返回乙個靜態物件引用。根據前面提到的引用作為返回值的三個規則,第2、3兩個方案都被否決了。靜態物件的引用又因為((a+b) == (c+d))會永遠為true而導致錯誤。所以可選的只剩下返回乙個物件了。
4、引用和多型
引用是除指標外另乙個可以產生多型效果的手段。這意味著,乙個基類的引用可以指向它的派生類例項。
【例7】:
class a;
class b:public a;
b b;
a &ref = b; // 用派生類物件初始化基類物件的引用
ref 只能用來訪問派生類物件中從基類繼承下來的成員,是基類引用指向派生類。如果a類中定義有虛函式,並且在b類中重寫了這個虛函式,就可以通過ref產生多型效果。
引用總結
(1)在引用的使用中,單純給某個變數取個別名是毫無意義的,引用的目的主要用於在函式引數傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題。
(2)用引用傳遞函式的引數,能保證引數傳遞中不產生副本,提高傳遞的效率,且通過const的使用,保證了引用傳遞的安全性。
(3)引用與指標的區別是,指標通過某個指標變數指向乙個物件後,對它所指向的變數間接操作。程式中使用指標,程式的可讀性差;而引用本身就是目標變數的別名,對引用的操作就是對目標變數的操作。
(4)使用引用的時機。流操作符《和》、賦值操作符=的返回值、拷貝建構函式的引數、賦值操作符=的引數、其它情況都推薦使用引用。
c 中引用的作用
用途起別名 type 別名 原名 引用必須初始化 一旦初始化後,不能修改 對陣列建立引用 includeusing namespace std 1.引用基本語法 type 別名 原名 void test01 2.引用必須初始化 void test02 void test01 位址傳遞 void my...
C 中的作用域符號( )
c 中通過 符號來區分變數等的作用域。作用域包括三種 全域性作用域符,類作用域符,命名空間作用域符 命名空間 是作用域限定符或者稱作用域運算子或者作用域操作符 scope operator 例如命名空間。作用 namespace name 的另一種用法 直接用在全域性函式前,表示是全域性函式。當類的...
符號在c 的中的作用
作用 後面的字串不用轉義,換行自動識別 比如它在string中的應用。1字元 表示,其後的字串是個 逐字字串 verbatim string 這個說法來自c primer 中文版 stanley b.lippman,侯捷 陳碩合譯 2對於逐字字串字面變數 verbatim string litera...