C C 筆試題 三

2021-06-18 14:03:27 字數 2974 閱讀 8959

1.動態多型與靜態多型
動態多型也就是我們經常所說的多型,是通過繼承與虛函式來實現的,是執行時確定的。

靜態多型則是通過模板技術實現的,這種多型是在編譯時期就確定的

2.用c++設計乙個不能被繼承的類

將建構函式和析構函式定義為私有成員就可以了。

但是這樣了,如何例項化物件了?可以採用靜態成員函式例項化和釋放物件。

3.建構函式的初始化列表

建構函式的初始化列表中的變數初始化順序變數在類中宣告的順序一致。

那麼能不能將這些變數的初始化就放在建構函式裡面,通過賦值了?

在有些情況下,是必須在建構函式的初始化類表裡進行的。const型別的成員變數和引用型別的成員變數

effective c++條款12,和13說明了這個問題。   

4.使形參成為const引用,就可以使用同乙個定義來輸出const和非const物件??

複習關於const物件的一些知識:

aconst物件在定義時必須被初始化,因為const物件在定以後就不允許被初始化

bconst物件預設為檔案的區域性變數

非const變數定義 

//file_1.cc

int counter;

//file_2.cc

extern int counter;

++counter;

const變數定義,如果要用在別的檔案,就必須在定義時指明extern,而非const變數不用。

//file_1.cc

externconst int bufsize = fcn();

//file_2.cc

extern const int bufsize

for(int i = 0; i != bufsize; ++i)

c

5.c++支援兩種初始化變數的形式:複製初始化和直接初始化。兩者有細微差別,直接初始化語法靈活且效率更高。

int ival(1024);  //direct

int ival = 1024; //copy

初始化不是賦值,兩者有區別:初始化是建立變數並給他賦初始值,而賦值則是擦除物件的當前值並用新值替代。

6.變數定義與宣告的區別

變數只能定義一次,但是可以宣告多次。

7.以下程式段的輸出結果是()

#includeusing namespace std;

class a

~a()

};class b

~b()

};class c

~c()

};class d : public c

~d()

private:

b b;

a a;

};int main()

a、a  b  c  d ~d

b、a  b  c  d ~c

c、c  b  a  d ~d

d、c  b  a  d ~c

程式自己跑了,確實是d為什麼了?? 8.

char str1 = "abc";  

char str2 = "abc";

const char str3 = "abc";

const char str4 = "abc";

const char* str5 = "abc";

const char* str6 = "abc";

char* str7 = "abc";

char* str8 = "abc";

cout << boolalpha << ( str1==str2 ) << endl; // 輸出什麼?

cout << boolalpha << ( str3==str4 ) << endl; // 輸出什麼?

cout << boolalpha << ( str5==str6 ) << endl; // 輸出什麼?

printf("%p\n",str5);

cout << boolalpha << ( str7==str8 ) << endl; // 輸出什麼?

printf("%p\n",str7);

cout<

輸出結果如下:

可見,str5,str7指向的是同一塊儲存區域。所以,通過*(str7+1) = 'd';進行修改也是不行的。

9.下面**的輸出是什麼?

float a = 1.0f;

cout<< (int)a 分別輸出false和true。注意轉換的應用。(int)a實際上是以浮點數a為引數構造了乙個整型數,該整數的值是,(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。因為以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。

注意,程式的輸出會顯示(int&)a=1065353216,這個值是怎麼來的呢?前面已經說了,以浮點數形式存放在記憶體中,按ieee754規定,其內容為x0000803f(已考慮位元組反序)。這也就是a這個變數所佔據的記憶體單元的值。當(int&)a出現時,它相當於告訴它的上下文:「把這塊位址當做整數看待!不要管它原來是什麼。」這樣,內容x0000803f按整數解釋,其值正好就是(十進位制數)。

通過檢視彙編**可以證實「(int)a相當於重新構造了乙個值等於a的整型數」之說,而(int&)的作用則僅僅是表達了乙個型別資訊,意義在於為cout《及==選擇正確的過載版本。

10.非c++內建型別a和b,在哪幾種情況下b能隱式轉化為a?

1.b是a的子類

2.

C C 筆試題集錦

1.求下面函式的返回值 微軟 int func x int countx 0 while x countx x x x 1 return countx 假定x 9999。答案 8 思路 將x轉化為2進製,看含有的1的個數。2.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的...

C C 技術筆試題

指標 include void getmemery char p,int num int main 答案 程式崩潰。實際上分配記憶體的只是形參p的乙個副本,函式呼叫結束後p又沒有返回給str,strcpy的str實際上是沒有分配記憶體。如果想不通過返回值的方式給str分配記憶體,程式如下。inclu...

C C 筆試題 一

1.include class shape shape int main int aaa std cin aaa 輸出的是ctorctordtor,因為b沒有呼叫delete析構 a與b有什麼區別了,就是乙個在棧上,乙個在堆上嗎?2.c語言是從那種語言發展而來的?答案很直接,從b語言發展而來的 3....