C&C++專項小練(二)

專項小練(二)

1 定義好了一個類student,現在要定義類derived,它是從student私有派生的,定義類derived的正確寫法:

clase derived:private student{...}
int main()
{
int a[5]  = {1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr - 1));
return;
}
//2,5

&a + 1: 取數組a 的首地址,該地址的值加上sizeof(a) 的值,即&a + 5*sizeof(int)

int a[2][2][3]= { {{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};
int *ptr=(int *)(&a+1);
printf(%d %d”, *(int*)(a+1), *(ptr-1));
//7 12
  1. &a+i = a + i*sizeof(a);
  2. a+i = a +i*sizeof(a[0]);

2 C++/JAVA類中static 成員和對象成員的說法
虛成員函數不可能是static 成員函數;

3 m 和 n 都是 int 類型,那麼以下 for 循環語句

for(m=0,n=-1;n=0;m++,n++)  //for循環中條件判斷語句,不符合條件跳出循環 
    n++;
循環體一次也不執行

4 中間件特點的描述
中間件應支持標準的協議和接口
中間件可運行於多種硬件和操作系統平臺上
跨越網絡,硬件,操作系統平臺的應用或服務可通過中間件透明交互

5 假定y=8
當x=3時,z=8
當x=4時,z=8
當x=5時,z=8
當x=6時,z=8
當x=7時,z=8
當x=8時,z=8
當x=9時,z=16
當x=10時,z=16
當x=11時,z=16
當x=12時,z=16

z=((x+y-1) & (~(y-1)));

y - 1 = 7轉換爲二進制爲 0000 0111;
~(y - 1)爲1111 1000;
x + y - 1即爲 x + 0000 0111;很明顯在x小於8時,相加的結果不會超過低四位;在x大於8後,相加結果到高四位;
最後與~(y-1)進行與運算,得到題目所示結果
注意"~"爲非運算符

6 x和y均定義爲int型,z定義爲double型

scanf("%x %* d%o",&x,&y); right
scanf("%x%o%6.2f",&x,&y,&z); erro

scanf輸入double時只接受le或lf,不接受f,所以D是錯誤的;%*d表示讀入一個整數,但是並不存儲,
所以C是正確的(輸入三個數,第一個數賦值給x,第三個數賦值給y,第二個數省略)

7 關於內存分配和釋放的函數及其區別描述
malloc和calloc的區別是1塊與n塊的區別和初始化
realloc調用形式爲(類型*)realloc(*ptr,size):將ptr內存大小增大到size。

8 關於虛函數的描述
//虛函數是實現方法重寫的工具??
通過虛函數,類體系獲得了多態性支持 erro why?
虛函數必須在子類中實現 ??
在C++中,基類的析構函數建議爲虛析構函數 ;
C++中靜態成員函數、構造函數、內聯函數不能聲明爲虛函數;
大理工Lemon
1.普通函數(不能被覆蓋)
2.友元函數(C++不支持友元函數繼承)
3.內聯函數(編譯期間展開,虛函數是在運行期間綁定)
4.構造函數(沒有對象不能使用構造函數,先有構造函數後有虛函數,虛函數是對對象的動作)
5.靜態成員函數(只有一份大家共享)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章