31:知識點1:可以將類當作一種類型來看待,兩個類即使成員部分完全相同,也屬于不同的類型
知識點2:類允許包含指向它自身類型的指針或者引用
知識點3:創建一個類的對象之前必須先定義該類,僅僅聲明是無法讓編譯器了解到該類需要多少空間的
#ifndef Cccc//第一次包含本頭文件時,#ifndef判斷為真,預處理器將處理后面的內容直到#endif,此時的預處理變量Cccc已定義#define Cccc//第二次包含本頭文件時,#ifndef判斷為假,預處理器將忽略后面的內容class X;//事先聲明class Y{ X object;};class X{ Y *my_pointer = NULL;};#endif//只要簡單的加上就好了,無視C++中的作用域規則,作用是防止頭文件被重復包含32:知識點1:若想將一組重載函數聲明為一個類的友元,那么必須逐個進行聲明知識點2:在類內聲明的友元必須在類內或者類外進行定義之后才可以使用
此題在clear()函數之前加 friend 關鍵字即可
33:知識點1:一個類就是一個作用域,函數使用的相關變量名,已經明確了在類的作用域當中,所以不必再進行說明
知識點2:在類的外部定義的函數,必須聲明類作用域,其函數名和返回類型都需要進行聲明
此題的pos在類中聲明定義,在外部使用時需要聲明作用域
Screen::pos Screen::size() const34:知識點1:名字查找的順序:由內而外、自上而下
知識點2:類的定義處理步驟:首先編譯成員的聲明,直到類全部可見是再編譯函數體
即成員函數在類的聲明全部處理完之后才會被定義,所以可以調用函數中定義的任何名字
知識點3:在類中,類型名要特殊處理,最好是定義在類的一開始,并且不能與外層作用域中同名
此題中,會出現錯誤:pos未定義
35:Type有兩種類型,應將最后一個函數的Type也聲明為Exercise::作用域,因為返回值是double類型
36:知識點1:類內成員是const、引用時或者使用某種類類型沒有默認構造函數的成員時必須將其初始化
知識點2:初始化和賦值是不等價的
知識點3:成員初始化的順序一般是沒有要求的,但是若用一個成員來初始化另一個成員是,就必須考慮到其定義時的順序(寫時保持順序一直即可)
此題即出現了知識點3中的問題,用一個成員來初始化另一個成員,沒有考慮順序問題
37:知識點:當構造函數為所有參數都提供了默認實參時,實際上也定義了默認構造函數
第一個調用的是第三種構造函數
第二個調用的是默認的構造函數(默認參數已經在237頁的代碼中設定)
第三種調用的是第一種構造參數
38:
Sales_data(std::istream &is = std::cin) { read(is, *this); }//將默認實參直接賦予變量即可39:不合法,調用的時候不知道調用哪個了,編譯器分辨不了。
40:Employee:數據成員:company/name/age/address/salary/position/.......
構造函數中company可以設置為默認參數,其他的可以進列表初始化。
新聞熱點
疑難解答
圖片精選