Talk is cheap, show me the code.
重載操作符時需要區分有些重載函數適合放在類內部,有些重載函數不適合放在類內部。自增自減操作符,解引用操作符重載函數適合放在類內部,但是四則算數運算操作符,相等不等操作符,關系操作符和位操作符一般定義為普通非成員函數(需要用到類成員變量時,可以將重載函數設為類的友元函數)。
流重載操作符只能作為普通非成員函數,然后將重載函數置為類的友元函數。
如果重載自增自減操作符,要注意區分前綴自增自減和后綴自增自減的區別。
前綴自增自減操作符重載:
Object& Operator++(){this->val++; return *this};
后綴自增自減操作符重載,需要額外添加一個形參以區分前綴自增自減操作符,而且這里不能直接返回*this,這是后綴操作符的特點:
Object operator++(int){Object obj(*this); obj.val++; return obj;};
保留字virtual的目的是啟動動態綁定。virtual只能用在類內部聲明方法時添加,不能在類外部定義方法時添加。C++的函數默認不使用動態綁定,要觸發動態綁定,必須滿足兩個條件:第一,只有指定為虛函數的成員函數才能進行動態綁定,成員函數默認為非虛函數,非虛函數不適用動態綁定;第二,必須通過基類類型的引用或指針進行函數調用。當基類類型的引用或指針已經指向繼承類時,如果要調用基類的方法,則必須使用域作用符。下面的例子中可以看到, 指向繼承類的ptr調用沒有加virtual 的show函數結果還是調用的基類的show方法,加了virtual之后才會動態綁定到繼承類的方法,這點要尤其注意。另外帶有默認實參的動態綁定需要注意,雖然調用的是繼承類的方法,但是默認實參使用的還是基類的默認實參,這是因為基類的默認實參傳遞給了繼承類的方法。
class Base { public: void show(){cout << "this is base" << endl;}; void show(string b){cout << "derive show: " << b << endl;}; void output(){cout << "output function" << endl;}; virtual void display(string b = "he"){cout << "base: " << b << endl;}; }; class Derive { public: void show(){cout << "this is derive" << endl;}; void display(string b = "hello"){cout << "derive: " << b << endl;}; }; int mian() { Derive d; Base *ptr = &d; ptr->show(); //輸出為 this is base ptr->display(); //輸出為 derive: he ptr->display("lee"); //輸出為 derive: lee d.show(); //輸出為 this is derive d.show("h23"); //編譯錯誤,C++中繼承類和基類不構成重載關系 d.output(); //輸出為 output function }
class與struct的區別有兩個:第一,class的成員默認權限是PRivate,struct的成員默認權限是public;第二,繼承時class的繼承權限默認是private,struct繼承的默認權限是public。
類如果存在繼承關系,基類的析構函數必須設置為虛函數。
繼承類中重載了基類函數,繼承類的對象或指針只能調用繼承類中重載了的函數,不能調用到基類的函數。但如果不是同名重載的函數,繼承類的對象或指針還是能調用到基類中的函數。詳見第4條中的例子
C++中繼承類和基類之間不構成重載關系,也就是說基類的同名函數沒有在繼承類中覆蓋,那么繼承類對象或指針不能調用到基類的該函數。C++中的動態綁定,或者成為多態性必須由virtual關鍵字來實現,否則基類指針或引用指向繼承類,調用的同名函數也還是基類的函數。java中繼承規則簡單一些,基類和繼承類也構成重載關系,繼承類對象或指針、引用也可以使用基類的函數,比如第4條中d.show(“h23”)也是可以執行的。
模板template中class和typename沒有區別。句柄(handle)其實是智能指針,兩個指針指向同一個對象,當某一個指針刪除了該對象時,另一個指針就變成了垂懸指針,而兩個句柄指向同一個對象,當某一個句柄刪除了該對象時,刪除操作只是將指向該對象的指針計數減一,當計數為0時才真正刪除該對象,避免出現垂懸指針的情形。
新聞熱點
疑難解答
圖片精選