《C++專項練習》 — (2)

來源:互聯網
上載者:User

標籤:c++

C++基礎專項練習二,,,水平依然不到家!

錯題分析與總結

1 . 有如下模板定義:

template <class T>T fun(T x,T y){    return x*x+y*y;}

在下列對fun的調用中,錯誤的是()
A. fun(1, 2)
B. fun(1.0, 2)
C. fun(2.0, 1.0)
D. fun(1, 2.0)

分析:這是一道C++模板的題目,模板函數的調用,這裡主要是要求函數參數傳回值的類型一致;
對於選項A,參數都是int類型,符合要求;選項B,參數為浮點型與整型,類型不一致,錯誤;選項C,參數都是浮點型,類型一致;選項D,通過強制類型轉換,將參數都轉換為浮點型,類型一致;
答案:B
總結:錯選D,對模板函數的調用瞭解不透徹;

2 . c++中,聲明const int i,是在哪個階段做到 i只可讀的?
A. 編譯
B. 連結
C. 運行
D. 以上都不對

分析:const用來說明所定義的變數是唯讀。 這些在編譯期間完成,編譯器可能使用常數直接替換掉對此變數的引用。
答案:A
總結:錯選C

3 .類成員函數的重載、覆蓋和隱藏區別描述正確的有?
A .覆蓋是指在同一個類中名字相同,參數不同
B .重載是指衍生類別函數覆蓋基類函數,函數相同,參數相同,基類函數必須有virtual關鍵字
C .衍生類別函數與基類函數相同,但是參數不同,會”隱藏”父類函數
D .函數名字相同,參數相同,基類無virtual關鍵字的衍生類別的函數會”隱藏”父類函數

分析:關於類成員函數的重載、覆蓋和隱藏概念非常相似,下面總結如下:
a.成員函數被重載的特徵:
(1)相同的範圍(在同一個類中);
(2)函數名字相同;
(3)參數不同;
(4)virtual 關鍵字可有可無。
b.覆蓋是指衍生類別函數覆蓋基類函數,特徵是:
(1)不同的範圍(分別位於衍生類別與基類);
(2)函數名字相同;
(3)參數相同;
(4)基類函數必須有virtual 關鍵字。
c.“隱藏”是指衍生類別的函數屏蔽了與其同名的基類函數,規則如下:
(1)如果衍生類別的函數與基類的函數同名,但是參數不同。此時,不論有無virtual關鍵字,基類的函數將被隱藏(注意別與重載混淆)。
(2)如果衍生類別的函數與基類的函數同名,並且參數也相同,但是基類函數沒有virtual 關鍵字。此時,基類的函數被隱藏(注意別與覆蓋混淆)
答案: CD 此題是多項選擇

4 .下面這個程式執行後會有什麼錯誤或者效果:

#define MAX 255int main(){     unsigned char A[MAX], i;     for (i = 0; i <= MAX; i++)         A[i] = i;}

A. 數組越界
B. 死迴圈
C. 棧溢出
D. 記憶體泄露

分析: 死迴圈加數組越界訪問(C/C++不進行數組越界檢查 MAX=255;
(1)數組A的下標範圍為:0….MAX-1;
(2)當i迴圈到255時,迴圈內執行: A[255]=255;這句本身沒有問題,但是返回for (i=0;i<=MAX;i++)語句時,由於unsigned char的取值範圍在(0..255),i++以後i又為0了,這樣就會無限迴圈下去,造成了死迴圈;
答案: AB

5 .關於static用途說法正確的是?
A .聲明靜態外部類
B .聲明靜態外部全域變數
C .聲明靜態外部函數
D .聲明靜態局部變數

分析:型別宣告符在C語言裡面主要有三個用途:
1:設定靜態局部變數,變數只定義一次,不能被別的函數使用
2:設定靜態全域變數,變數不能被外部檔案所使用
3:在類中設定靜態函數,只能訪問靜態變數
答案:BCD

6 .請找出下面代碼中的所有錯誤。說明:以下代碼是把一個字串倒序,如“abcd”倒序後變為“dcba”?

1 #include "string.h"2 int main() 3 {4    char *src = "hello,world";5    char *dest = NULL;6    int len = strlen(src);7    dest = (char *)malloc(len);8    char *d = dest;9    char *s = src[len];10   while (len-- != 0)11      d++ = s--;12   printf("%s", dest);13   return 0;14 }

A .第7行要為’\0’分配一個空間
B .第9行改成char * s = &src[len-1]
C .第12行前要加上*d = 0;
D .第13行前要加上free(dest)釋放空間

分析:

int main() {    char *src = "hello,world";    int len = strlen(src);    char *dest = (char *)malloc(len + 1); //要為\0分配一個空間    char *d = dest;    char *s = &src[len - 1]; //指向最後一個字元    while ( len-- != 0 )        *d++ = *s--;    *d = 0; //尾部要加\0    printf("%s\n", dest);    free(dest);// 使用完,應當釋放空間,以免造成記憶體匯泄露    return 0; }

答案:ABCD

精題收藏

1 . 下列一段C++代碼的輸出是?

#include "stdio.h"class Base { public:     int Bar(char x)     {         return (int)(x);     }     virtual int Bar(int x)     {         return (2 * x);     } }; class Derived : public Base { public:     int Bar(char x)     {         return (int)(-x);     }     int Bar(int x)     {         return (x / 2);     } }; int main(void) {     Derived Obj;     Base *pObj = &Obj;     printf("%d,", pObj->Bar((char)(100)));     printf("%d,", pObj->Bar(100)); }

A .100,-100
B .100,50
C .200,-100
D .200,50
分析:
Derived Obj;
Base *pObj = &Obj;
printf(“%d,”, pObj->Bar((char)(100)))
printf(“%d,”, pObj->Bar(100));
第一個Bar(char)是非虛函數,因此是靜態繫結,靜態繫結是指指標指向聲明時的對象,pObj聲明時為Base類,因此調用的是Base類的Bar(char)
第二個Bar(char)是虛函數,因此是動態綁定,動態綁定是指指標指向引用的對象,pObj引用Derived對象,因此調用的是Derived類的Bar(int)

《C++專項練習》 — (2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.