1. 程式人生 > >11-1C/C++刷題

11-1C/C++刷題

1、對於以下程式碼:

char *p=new char[100]

p在棧上 new出來的在堆上
動態分配在堆中,其他的記憶體分配都在棧上進行。
2、static char a[2]={‘1’,‘2’,‘3’};說法是都正確?
錯誤 陣列越界
3、在C語言的定義和呼叫中,函式的定義不可以巢狀,但函式的呼叫可以巢狀。
4、以下程式輸出結果是9,10

main()
{int i=010,j=10;
printf("%d,%d\n",++i.j--);
}

C/C++規定,一個數如果要採用八進位制,必須它前面加上一個0。i=010八進位制,轉換成十進位制得到:8^1*1=8
5、

int func(int a)
{
   int b;
   seitch (a)
   { 
      case 1: b=30;
      case 2: b=20;
      case 3: b=16;
      default: b=0;
   }
   return b;
}

則func(1)=0
case裡沒有break 會一直執行到default。
6、不能作為過載函式的呼叫的依據是函式型別。
函式過載:函式名稱必須是相同的,引數列表是不同的,包括引數型別,引數順序,引數個數,這三個任意一個不同都構成過載而且函式過載跟函式的返回值型別是沒有關係的。所以判斷函式是不是過載的標誌就是函式名相同,函式的引數不同。
函式重寫:函式重寫與過載不同,重寫發生於有繼承關係的子類和父類之間,而且重寫是是重寫函式的方法體,所以重寫時子類函式的方法簽名(函式的名稱,函式的引數個數,引數順序)是與父類保持一致的,而且函式的返回值型別也保持與父類一致。
7、執行下列程式碼輸出17,72

#include <stdio.h>
int main(void){
int q=0;
int i=1;
for(; ;i++)
{
if(q>60) break;
if(i%2==0)
q+=i;
}
printf("%d,%d",i.q.);
return 0;
}

8、二進位制資料檔案流fdat讀指標移到檔案頭的語句是fdat.seekg( 0, ios::beg);
對輸入流操作:seekg()與tellg() 對輸出流操作:seekp()與tellp() seekg()是對輸入檔案定位,它有兩個引數:第一個引數是偏移量,第二個引數是基地址。 對於第一個引數,可以是正負數值,正的表示向後偏移,負的表示向前偏移。而第二個引數可以是: ios::beg:表示輸入流的開始位置 ios::cur:表示輸入流的當前位置 ios::end:表示輸入流的結束位置 tellg()函式不需要帶引數,它返回當前定位指標的位置,也代表著輸入流的大小。
9、派生類物件可以訪問基類成員中的(D)
A 公有繼承的私有成員
B 私有繼承的公有成員
C 公有繼承的保護成員
D以上都錯
題目是派生類物件
基類成員在派生類的訪問屬性取決於繼承方式以及這些成員本來在基類中的訪問屬性
(1)基類的私有成員無論什麼繼承方式,在派生類中均不可以直接訪問
(2)在公有繼承下,基類的保護成員和公有成員均保持原訪問屬性
(3)在保護繼承方式下,基類的保護和公有成員在派生類的訪問屬性均為保護屬性
(4)在私有繼承下,基類的保護和公有成員在派生類中的訪問屬性均為私有屬性
對於此題:
(1)公有繼承的私有成員不被繼承,所以不能訪問
(2)私有繼承的公有成員可以被類的方法訪問,不能被物件訪問,屬於私有屬性
(3)公有繼承的保護成員具有保護屬性,只能被類的方法訪問,不能被物件訪問
10、有以下表達式:

int a=248,b=4;
int const c=21;
const int *d=&a;
int *const e=&b;
int const *const f=&a;

請問下列表達式哪些會被編譯器禁止?
A *c=32
B *d=43
C e=&a
D f=0x321f
E d=&b
F *e=34
在這裡插入圖片描述
在這裡插入圖片描述