設定虛基類的目的是:
多重繼承的示例:
以左側的圖為例:
多重繼承的定義:
乙個派生類(d)有兩個或者兩個以上的基類(b和c)
多重繼承引發的二義性:
假如上述這些基類(b和c)具有相同的基類a,a中的成員資料和成員函式,最終都會以雙份的形式拷貝到類d之中,那麼呼叫它們的時候就會出現二義性的問題。
虛基類:
專門用來解決多重繼承繼承引發的二義性問題;(可以理解為d直接從a繼承)
儘管c++或其他oo語言支援多重繼承,但在實際軟體開發中多重繼承用的並不多,原因在於多重繼承過手複雜。因此,在c#中已經不再支援多重繼承了。
char a[3]
, b=
"china"
;a = b;
printf
("%s"
, a)
;
上述的程式段,無法通過編譯。
分號,分割兩個句子,加號,運算子,冒號,三目運算子。這些都能分割兩個識別符號。
q:對於下面的**,輸出為?
#include
intmain
(void
)
n = strlen(x),計算y的元素長度,即4。
*x = x[n],可以理解為:*x = y[4],即將指標x指向y的第五個元素(x[4] = y[4]),又因為前面的char *x = y,y的首位址就換成了y的第五個元素,即』\0』。
因此,之後的輸出:
x=ntse
y=
1,malloc,calloc,realloc,free屬於c函式庫,而new/delete則是c++的操作符;
2,alloc的比較:
巨集與函式的區別:
巨集做的是簡單的字串替換(注意是字串的替換,不是其他型別引數的替換),而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別。
巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,既然說是值,自然是計算得來的.。
巨集在編譯之前進行,即先用巨集體替換巨集名,然後再編譯的,而函式顯然是編譯之後,在執行時,才呼叫的。因此,巨集占用的是編譯的時間,而函式占用的是執行時的時間。
巨集的引數是不佔記憶體空間的,因為只是做字串的替換,而函式呼叫時的引數傳遞則是具體變數之間的資訊傳遞,形參作為函式的區域性變數,顯然是占用記憶體的。
函式的呼叫是需要付出一定的時空開銷的,因為系統在呼叫函式時,要保留現場,然後轉入被呼叫函式去執行,呼叫完,再返回主調函式,此時再恢復現場,這些操作,顯然在巨集中是沒有的。
內聯函式與巨集的區別:
內斂函式的執行可以除錯,而巨集定義不可以。
編譯器會內聯函式的引數型別做安全檢查或者自動型別轉換(如同普通函式),而巨集定義則不會。
內聯函式可以訪問類的成員變數,巨集定義則不能。
在類中宣告同時定義的成員函式,會自動轉換為內斂函式。
類的成員函式後面加上const,表明這個函式不會對這個類物件的資料成員(準確的說是費靜態資料成員)做任何改變。
常量(即const)物件可以呼叫const塵緣函式,而不能呼叫非const修飾的函式。
編譯預處理命令的特點:
為了區別一般的語句,預處理命令都必須以#開始,結尾處不加分號。
預處理命名可以放在程式中的任何位置。
在陳谷彙總凡是以#開始的語句都是預處理命令列。
最常見的預處理有:
檔案包含、條件編譯、區域性控制和巨集替換。
q:若有以下說明和語句,int c[4][5],(*p)[5];p=c;能正確引用c陣列元素的是( )。
a. p+1
b. *(p+3)
c. *(p+1)+3
d. *(p[0] + 2)
a:陣列指標,也叫行指標。
定義 int (*p)[n]
其中,()優先順序高,因此首先說明p是乙個指標,指向乙個整型的一維陣列,這個陣列的長度為n,也可以說是p的步長。即,當執行p+1時,p要跨過n個整型陣列的長度。
如要將二維陣列賦給一指標,應這樣賦值:
int c[4][5];
int (*p)[5]; //該語句是定義乙個陣列指標,指向含有5個元素的一維陣列。
p = c; //該二維陣列的首位址賦給p,也就是c[0]或者&c[0][0]
p++; //該語句執行過後,也就是p=p+1;p跨過行c[0]指向了行c[1]
*(p[0]+2); //等價於*(*(p+0)+2),表示a[0][2];
因此,正確答案為d。
q:函式func的定義如下:
void func(const int& v1, const int& v2)
以下**在vs中輸出結果為____。
int main (int argc, char* ar**)
a:
c語言中,函式引數入棧的順序是從右往左。
func(++i, i++)可以分解為:
引數 i 先入棧 輸出0
然後執行i++ 此時i為1
接著引數 i 先執行++i i 此時為2 **棧進行輸出 2
Nowcoder專項練習 C (九)
1,指標實現變數交換問題 對於問題 void swap int int a,int b 對於上面的 如果是兩個負數,比如 5和 7 以4bit為例 以補碼形式可得,5 1011,7 1001 5 7 10100 0100 4 溢位後為4 4 7 4 0100 0111 1011 5的補碼 4 5 4...
wbs專項練習
2009上17題 不是wbs的正確分解方法或結構。a 把主要的專案可交付物和子專案作為第一層 b 在同一wbs層上採用不同的分解方法 c 在不同wbs層上可採用不同的分解方法 d 把專案生命期作為第一層,專案交付物作為第二層 答案解析 b 我們通常用wbs模板來製作wbs,最終的結構可以有 把主要的...
排序專項練習
1.當待排序記錄已經從小到大排序或者已經從大到小排序時,快速排序的執行時間最省 答案 b 2.以下排序中時間複雜度最差的是 答案 b 3.最壞情況下 insert sort,quick sort merge sort 的複雜度分別是多少?答案 b 快排在已排序情況下效率最低!4.設某檔案經內排序後得...