原创 類裏的一些特性

注意的幾點 1.可以在類裏定義類型別名,受訪問級別約束。 class Screen { public: typedef string::size_type pos; }; class Screen {

原创 算法的謂詞(引入lambda)

謂詞 含義 指可調用的表達式,作爲算法的一個實參傳進去。標準庫算法用的謂詞只有一元謂詞(接受一個參數)和二元謂詞 實例 通過定義一個可調用函數,作爲參數傳入sort函數。 #include <iostream> #include <ve

原创 拷貝、賦值和析構函數(稍微進階)

拷貝構造函數 基本形式 注意形參類型是類類型,不能聲明爲explicit,因爲有些地方需要隱式轉換 class Foo { public: Foo(); Foo(const Foo&); }; 合成拷貝構造函數 你不聲明

原创 函數匹配(需最佳匹配)

規則 1、選擇可行函數集 2、尋找最佳匹配 3、找到就結束,找不到二義性錯誤。 void f(); void f(int); void f(int,int); void f(double,double = 3.14); f(5.6);

原创 函數返回值(包含const返回值解析)

如何返回值 1.返回值非引用 primer說函數返回值用於初始化函數調用點的一個臨時對象,所以返回值到臨時對象是第一次拷貝,臨時對象到接收值的變量是第二次拷貝。 string make_plural(size_t ctr, const

原创 繼承中的類作用域

引出 Bulk_quote bulk; cout <<bulk.isbn()<<endl; 靜態類型決定由誰開始向上搜索 Quote是Disc_quote的父親,Disc_quote是Bulk_quote的父親。 在Disc_quot

原创 虛析構函數

動機 防止少刪除派生類對象 寫法 調用 虛析構造成不合成移動操作 管它合不合成,反正我又不敢用合成的

原创 繼承中的訪問控制

proteced例外 派生類通過派生類對象訪問受保護成員,不能通過基類對象訪問受保護成員。 三種繼承方式 public繼承維持基類關鍵字不變。 protected繼承把基類裏的pubulic設爲protected。降級 private繼

原创 基類和子類的類型轉換

綁定例外 一般指針和引用和要綁定的對象屬於同種類型,但基類指針或引用的綁定是一個例外。 靜態類型和動態類型 靜態類型編譯時就確定,動態類型是運行時查對象內存才知道。 靜態類型是Quote&,動態類型是運行時調用函數才知道。 一致情況 如

原创 基類和派生類

基類 定義 class Quote { public: Quote() = default; Quote(const std::string &book, double sales_price): bookNo(

原创 抽象基類

動機 有時基類對象是完全沒有意義的,比如動物類,或者DIsc_quote類,裏面的net_price函數沒有意義。這時可以在類裏面包含純虛函數來禁止創建對象。 純虛函數 DIsc_quote類是一個通用概念,裏面的net_price函數無

原创 虛函數

定不定義 普通成員函數只要沒用到可以不寫定義,但虛函數只要在主函數被用到,所有父類和子類必須都定義該函數,因爲編譯器只有在運行時才能確定用到哪個函數。 調用虛函數 指針或引用運行時解析 有兩種類型:動態和靜態。 這裏有動態類型和靜態類型

原创 右值引用&&

動機 對象之間的拷貝太費時,即將銷燬的對象不必拷貝,僅僅移動就行。 右值引用 回憶左值是要用表達式的地址,右值是要表達式的值。 左值引用是&,右值引用是&&。左值不能指右值,右值不能指左值。 int i = 42; int &r = i

原创 引用限定符

動機 允許向右值賦值 有時會出現不可思議的語句。 string s1 = "aa"; string s2 = "aa"; s1 + s2 = "cc"; //左邊是右值,也是對的 無法阻止這種限制,就只能強制阻止了 做法 1.只能向

原创 delete阻止拷貝

動機 有時我們不想對象可拷貝,比如iostream對象,可能想到的方式是不去定義,但賦值運算符和拷貝構造函數編譯器幫我們默認定義了。只能顯式說明一下。 struct noCopy { noCopy() = default;