Nowcoder專項練習 C (十三)

2021-09-24 02:11:28 字數 2878 閱讀 7053

設定虛基類的目的是:

多重繼承的示例:

以左側的圖為例:

多重繼承的定義:

乙個派生類(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.設某檔案經內排序後得...