以下是一些C++能力測試題,涵蓋了從基礎語法到高級特性的多個方面:
選擇題
1. 下面關于RTTI的說法,正確的是?
? ? A. 使用`typeid`前必須包含`<type_info>`頭文件。
? ? B. `typeid`只能用于多態類型或表達式。
? ? C. `typeid`可以用于不完整類型。
? ? D. 已知`dynamic_cast<D *>(p) != nullptr`,則`typeid(*p)==typeid(D)`。
2. 下面關于`nullptr`的說法中,錯誤的是?
? ? A. `nullptr`是純右值。
? ? B. `nullptr`是C++關鍵詞。
? ?C. `static_cast<int>(nullptr) == 0`。
? ?D. `nullptr == NULL`。
?
?填空題
1. 在C++中,`new`可以認為是`malloc`加**構造函數的執行**。`new`出來的指針是直接帶類型信息的。而`malloc`返回的都是`void`指針。
?
?編程題
1. 編寫一個C++程序,實現以下功能:
? ? ?定義一個名為`Person`的類,包含私有成員變量`name`(字符串類型)和`age`(整數類型)。
? ? 提供構造函數,用于初始化`name`和`age`。
? ? 提供成員函數`display()`,用于顯示`Person`對象的信息(姓名和年齡)。
? ? - 在主函數中創建`Person`對象,并調用`display()`函數顯示信息。
?
代碼分析題
1. 分析以下代碼,指出其中的錯誤并解釋原因。
? ?```cpp
? ?class MyClass {
? ?public:
? ? ? ?int myFunction() {
? ? ? ? ? ?return result;
? ? ? ?}
? ?private:
? ? ? ?int result = 0;
? ?};
? ?```
?
?答案
1. 選擇題
? ? ?第1題:正確答案是A。使用`typeid`操作符需要包含`<type_info>`頭文件。
? ? ?第2題:正確答案是C。`static_cast<int>(nullptr)`的結果是未定義的,因為`nullptr`不能隱式轉換為整數類型。
2. 填空題
? ? - 答案為;構造函數的執行。
3. 編程題
? ? ?創建一個名為`Person`的類,包含構造函數和`display()`成員函數。
4. 代碼分析題
? ? ?錯誤:`result`在聲明時初始化為0,但在`myFunction()`中未定義。
? ? 原因:`result`是私有成員變量,不能在`myFunction()`中直接訪問。
?
希望這些測試題能幫助你評估和提升你的C++編程能力。