C/C++測(cè)試題
面向?qū)ο?/span>
選擇題:
C++概述
1、以下C++新增的關(guān)鍵字為 D 。
A break
B continue
C stuct
D inline
2、面向?qū)ο蟪绦蛟O(shè)計(jì)將數(shù)據(jù)與__A___放在一起,作為相互依存、不可分割的整體來(lái)處理。
A對(duì)數(shù)據(jù)的操作 B信息 C數(shù)據(jù)隱藏 D數(shù)據(jù)抽象
3、面向?qū)ο蟪绦蛟O(shè)計(jì)優(yōu)于傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),其優(yōu)越性主要表現(xiàn)在,它有希望解決軟件工程的兩個(gè)主要問(wèn)題:軟件復(fù)雜性和__A____。
A 軟件生產(chǎn)率的提高 B 精化已有的代碼 C 共享代碼 D 編寫(xiě)可重用代碼
4、面向?qū)ο笙到y(tǒng)的____B__是一種信息隱藏技術(shù),目的在于將對(duì)象的使用者與設(shè)計(jì)者分開(kāi),使用者不必知道對(duì)象行為實(shí)現(xiàn)的細(xì)節(jié),只需用設(shè)計(jì)者提供的協(xié)議命令對(duì)象去做即可。
A多態(tài)性 B封裝性 C繼承性 D復(fù)用性
5、___A___不是面向?qū)ο笙到y(tǒng)所包含的要素
A重載 B對(duì)象 C類 D繼承
6、關(guān)于C++與C語(yǔ)言的關(guān)系的描述中,____D__是錯(cuò)誤的。
A C語(yǔ)言是C++的一個(gè)子集 B C++與C語(yǔ)言是兼容的
C C++對(duì)C語(yǔ)言進(jìn)行了一些改進(jìn) D C++與C語(yǔ)言都是面向?qū)ο蟮?/span>
7、下面關(guān)于對(duì)象概念的表述中,___A___是錯(cuò)誤的。
A 對(duì)象就是C語(yǔ)言中的結(jié)構(gòu)變量
B 對(duì)象代表著正在創(chuàng)建的系統(tǒng)中的一個(gè)實(shí)體
C 對(duì)象是一個(gè)狀態(tài)和操作(或方法)的封裝體
D 對(duì)象之間的信息傳遞是通過(guò)信息進(jìn)行的
8、下面關(guān)于類概念的表述中,_____D_是錯(cuò)誤的。
A 類是抽象數(shù)據(jù)類型的實(shí)現(xiàn) B 類是具有共同行為的若干對(duì)象的統(tǒng)一描述體
C 類是創(chuàng)建對(duì)象的樣板 D 類就是C語(yǔ)言中的結(jié)構(gòu)類型
9、下列關(guān)于C++類的描述中錯(cuò)誤的是___C___。
A 類與類之間可以通過(guò)一些手段進(jìn)行通信和聯(lián)絡(luò)
B 類用于描述事物的屬性和對(duì)事物的操作
C 類與類之間必須是平等關(guān)系,而不能組成層次關(guān)系
D 類與類之間可以通過(guò)封裝而具有明確的獨(dú)立性
10、下列關(guān)鍵字中,____B__既在C語(yǔ)言中使用,又在C++語(yǔ)言中使用
A inline B break C private D public
11、C++對(duì)C語(yǔ)言做了很多改進(jìn)。下列描述中___D___使得C語(yǔ)言發(fā)生了質(zhì)變,即從面向過(guò)程變成了面向?qū)ο?/span>
A增加了一些新的運(yùn)算符 B允許函數(shù)重載,并允許設(shè)置默認(rèn)參數(shù)
C規(guī)定函數(shù)說(shuō)明必須用原型 D引進(jìn)了類和對(duì)象的概念
12、下列C++標(biāo)點(diǎn)符號(hào)中表示行注釋開(kāi)始的是___C___。
A # B ; C // D }
13、下列關(guān)于C++與C語(yǔ)言關(guān)系的描述中錯(cuò)誤的是__C____。
A C++是C語(yǔ)言的超集 B C++對(duì)C語(yǔ)言進(jìn)行了擴(kuò)充
C C++|與C語(yǔ)言都是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言 D C++包含C語(yǔ)言的全部語(yǔ)法
14、下列正確的選項(xiàng)是________A______。
A 繼承是創(chuàng)建一個(gè)具有另一個(gè)類的屬性和行為的新類的能力
B C語(yǔ)言支持面向?qū)ο蟮某绦蛟O(shè)計(jì)
C 空白符是一種可以被編譯的符號(hào)
D 標(biāo)識(shí)符不宜太長(zhǎng),一般設(shè)定為16個(gè)字符
15、下列關(guān)于多態(tài)說(shuō)法錯(cuò)誤的是__B_______。
A 不同的對(duì)象調(diào)用相同名稱的函數(shù),并可導(dǎo)致完全不同的行為的現(xiàn)象稱為多態(tài)性
B C++語(yǔ)言中多態(tài)性通過(guò)使用封裝技術(shù)來(lái)支持
C 多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要機(jī)制
D 多態(tài)是人類思維方式的一種模擬
類和對(duì)象
16、以下類的說(shuō)明,請(qǐng)指出錯(cuò)誤的地方_____A___。
Class CSample
{
int a = 2; (A)
CSample(); (B)
Public:
CSample(int val); (C)
~CSample(); (D)
}
17、有關(guān)類的說(shuō)法不正確的是____D____。
A 類是一種用戶自定義的數(shù)據(jù)類型
B 只有類中的成員函數(shù)才能存取類中的私有數(shù)據(jù)
C 在類中,如果不做特別說(shuō)明,所有的數(shù)據(jù)類型均為私有類型
D 在類中,如果不做特別說(shuō)明,所有的成員函數(shù)均為公有類型
18、有關(guān)類和對(duì)象的說(shuō)法下列不正確的有____C____。
A 對(duì)象是類的一個(gè)實(shí)例 B 任何一個(gè)對(duì)象只能屬于一個(gè)具體的類
C 一個(gè)類只能有一個(gè)對(duì)象 D 類與對(duì)象的關(guān)系和數(shù)據(jù)類型和變量的關(guān)系
19、關(guān)于類和對(duì)象,以下敘述正確的是__B____
A 一個(gè)類的成員函數(shù)可以任意調(diào)用
B 通常,只有通過(guò)具體的對(duì)象,才能訪問(wèn)類的成員函數(shù)
C 對(duì)象是模板,類是實(shí)例
D 類和對(duì)象間沒(méi)有任何關(guān)系
20、有關(guān)構(gòu)造函數(shù)的說(shuō)法不正確的是____D____。
A 構(gòu)造函數(shù)名字和類的名字一樣 B 構(gòu)造函數(shù)在說(shuō)明類變量時(shí)自動(dòng)執(zhí)行
C 構(gòu)造函數(shù)無(wú)任何函數(shù)類型 D 構(gòu)造函數(shù)有且只有一個(gè)
21、有關(guān)析構(gòu)函數(shù)的說(shuō)法不正確的是___C_____。
A 析構(gòu)函數(shù)有且只有一個(gè)
B 析構(gòu)函數(shù)無(wú)任何函數(shù)類型
C 析構(gòu)函數(shù)和構(gòu)造函數(shù)一樣可以有形參
D 析構(gòu)函數(shù)的作用是在對(duì)象被撤銷時(shí)收回先前分配的內(nèi)存空間
22、在類的定義體外定義成員函數(shù)時(shí),需要在函數(shù)名前加上__B______。
A 類標(biāo)記 B 類域標(biāo)記 C 類對(duì)象 D 域運(yùn)算符
23、在類的定義形式中,數(shù)據(jù)成員、成員函數(shù)和___A____組成了類定義體。
A 成員的訪問(wèn)控制消息 B 公有消息 C 私有消息 D 保護(hù)消息
24、____C____的功能使對(duì)對(duì)象進(jìn)行初始化。
A 析構(gòu)函數(shù) B 數(shù)據(jù)成員 C 構(gòu)造函數(shù) D 靜態(tài)成員函數(shù)
25、若Q是類,a是它的一個(gè)對(duì)象,p1是類對(duì)象a的一個(gè)指針,那么類對(duì)象a可以通過(guò)①___B____來(lái)訪問(wèn)類的成員,類對(duì)象a的指針p1可以通過(guò)②_____D__來(lái)訪問(wèn)類的成員。
A :: B . C ; D ->
26、下列的各類函數(shù)中,___C______不是類的成員函數(shù)
A 構(gòu)造函數(shù)B 析構(gòu)函數(shù) C 友元函數(shù) D 拷貝初始化構(gòu)造函數(shù)
27、通常拷貝初始化構(gòu)造函數(shù)的參數(shù)是______C____。
A 某個(gè)對(duì)象名 B 某個(gè)對(duì)象的成員名 C 某個(gè)對(duì)象的引用名 D 某個(gè)對(duì)象的指針名
28、類模板的使用實(shí)際上是將類模板實(shí)例化成一個(gè)具體的____A___。
A 類 B 對(duì)象 C 函數(shù) D 模板類
29、模板是實(shí)現(xiàn)類屬機(jī)制的一種工具,其功能非常強(qiáng)大,它既允許用戶構(gòu)造類屬函數(shù),既① ____B___;也允許用戶構(gòu)造類屬類,即② ______D__。
A 函數(shù)模板 B模板函數(shù) C 類模板 D 模板類
30、關(guān)于對(duì)象的this指針,以下敘述正確的是__B____
A 必須顯式地在類定義中聲明this數(shù)據(jù)成員,才能使用this指針
B 一旦生成一個(gè)對(duì)象,該對(duì)象的this指針就指向該對(duì)象本身
C 一個(gè)類的所有對(duì)象的this指針的值都是相同的
D 不能通過(guò)對(duì)象的this指針訪問(wèn)對(duì)象的數(shù)據(jù)成員和成員函數(shù)
31、關(guān)于new運(yùn)算符的下列描述中, D 是錯(cuò)誤的。
A 它可以用來(lái)動(dòng)態(tài)創(chuàng)建對(duì)象和對(duì)象數(shù)組
B 使用它創(chuàng)建的對(duì)象或?qū)ο髷?shù)組,可以使用運(yùn)算符delete刪除
C 使用它創(chuàng)建對(duì)象時(shí)要調(diào)用構(gòu)造函數(shù)
D 使用它創(chuàng)建對(duì)象數(shù)組時(shí)必須指定初始值
32、關(guān)于delete運(yùn)算符的下列描述中, C 是錯(cuò)誤的。
A 它必須用于new返回的指針
B 它也適用于空指針
C 對(duì)一個(gè)指針可以使用多次該運(yùn)算符
D 指針名前只用一對(duì)方括號(hào),不管所刪除數(shù)組的維數(shù)
繼承和派生
33、C++中的類有兩種用法:一種是類的實(shí)例化,即生成類的對(duì)象,并參與系統(tǒng)的運(yùn)行;另一種是通過(guò)________,派生出新的類。
A 復(fù)用 B 繼承 C 單繼承 D 多繼承
//答案:B
34、繼承具有_______,即當(dāng)基類本身也是某一個(gè)類的派生類時(shí),底層的派生類也會(huì)自動(dòng)繼承間接基類的成員。
A 規(guī)律性 B 傳遞性 C 重復(fù)性 D 多樣性
//答案:B
35、派生可以分為①________和②_________。由②________得到的派生類,其基類的所有公有成員都只能成為它的私有成員,這些私有成員只能被派生類的成員函數(shù)訪問(wèn),而③________無(wú)權(quán)訪問(wèn);①________的意義是基類中所有公有成員在派生類中也都是公有的。
A 公有派生 B 派生類的使用者 C 私有派生 D 派生類的構(gòu)造函數(shù)
//答案:①A②C③B
36、基類的①________不能為派生類的成員訪問(wèn),基類的②_______在派生類中的性質(zhì)和繼承的性質(zhì)一樣,而基類的③_______在私有繼承時(shí)在派生類中成為私有成員函數(shù),在公有和保護(hù)繼承時(shí)在派生類中仍為保護(hù)成員函數(shù)
A 公有成員 B 私有成員 C 私有成員函數(shù) D 公有成員函數(shù)
//答案:① B②A③D
37、子類的數(shù)據(jù)成員和成員函數(shù)除了有從父類繼承而來(lái)的外,還有:
A 子類不能擁有自己的數(shù)據(jù)成員和成員函數(shù)
B 子類可以新添自己的數(shù)據(jù)成員,但成員函數(shù)只能從父類繼承
C 子類可以新添自己的成員函數(shù),但數(shù)據(jù)成員只能從父類繼承
D 子類可以擁有自己獨(dú)特的數(shù)據(jù)成員和成員函數(shù)
//答案:D
38、在構(gòu)造一個(gè)類的對(duì)象時(shí),如果該類是從另一個(gè)類繼承的,則構(gòu)造函數(shù)的調(diào)用順序是
A 同類的繼承關(guān)系無(wú)關(guān)
B 先調(diào)用父類的構(gòu)造函數(shù),然后調(diào)用本類的構(gòu)造函數(shù)
C 先調(diào)用本類的構(gòu)造函數(shù),然后調(diào)用父類的構(gòu)造函數(shù)
D 不用調(diào)用構(gòu)造函數(shù)
//答案:B
39、在析構(gòu)一個(gè)類的對(duì)象時(shí),如果該類是從另一個(gè)類繼承的,則析構(gòu)函數(shù)的調(diào)用順序是
A 同類的繼承關(guān)系無(wú)關(guān)
B 先調(diào)用父類的析構(gòu)函數(shù),然后調(diào)用本類的析構(gòu)函數(shù)
C 先調(diào)用本類的析構(gòu)函數(shù),然后調(diào)用父類的析構(gòu)函數(shù)
D 不用調(diào)用析構(gòu)函數(shù)
//答案:C
重載、多態(tài)和虛函數(shù)
40、下列運(yùn)算符中,________運(yùn)算符在C++中不能重載。
A ?: B + C – D <=
//答案:A
41、下列運(yùn)算符中,________運(yùn)算符在C++中不能重載。
A && B [ ] C :: D new
//答案:C
42、如果一個(gè)類至少有一個(gè)純虛函數(shù),那么就稱該類為________。
A 抽象類 B 虛基類 C 派生類 D 以上都不是
//答案:A
43、下列描述中,________是抽象類的特性。
A 可以說(shuō)明虛函數(shù)
B 可以進(jìn)行構(gòu)造函數(shù)重載
C 可以定義友元函數(shù)
D 不能說(shuō)明其對(duì)象
//答案:D
44、關(guān)于動(dòng)態(tài)聯(lián)編的下列描述中,________是錯(cuò)誤的。
A 動(dòng)態(tài)聯(lián)編是以虛函數(shù)為基礎(chǔ)的
B 動(dòng)態(tài)聯(lián)編是在運(yùn)行時(shí)確定所調(diào)用的函數(shù)代碼的
C 動(dòng)態(tài)聯(lián)編調(diào)用函數(shù)操作是指向?qū)ο蟮闹羔樆驅(qū)ο笠?/span>
D 動(dòng)態(tài)聯(lián)編是在編譯時(shí)確定操作函數(shù)的
//答案:D
45、關(guān)于虛擬成員函數(shù),以下敘述正確的是________
A 析構(gòu)函數(shù)同構(gòu)造函數(shù)一樣,不能是虛擬的
B 在一個(gè)類中被定義為虛擬的成員函數(shù),其所有的派生類中相同的成員函數(shù)都是虛擬的
C 帶有虛擬函數(shù)的類不能直接生成對(duì)象,只有其子類才能生成對(duì)象
D 虛擬成員函數(shù)同普通成員函數(shù)不同,不能調(diào)用父類的虛擬成員函數(shù)
//答案:B
46、關(guān)于虛函數(shù)的描述中, 是正確的
A 虛函數(shù)是一個(gè)static類型的成員函數(shù)
B 虛函數(shù)是一個(gè)非成員函數(shù)
C 基類中說(shuō)明了虛函數(shù)后,派生類中與其對(duì)應(yīng)的函數(shù)可不必說(shuō)明為虛函數(shù)
D 派生類的虛函數(shù)與基類的虛函數(shù)具有不同的參數(shù)個(gè)數(shù)和類型
//答案:C
填空題:
C++概述
47、寫(xiě)出除class ,private, protected,public之外的任意五個(gè)C++新增的關(guān)鍵字 、 、 、 、 。
參考//答案:catch, ,const,delete,friend,new,operator, template,this,throw,try,virtual
48、_____________是指一種事物保留了另一種事物的全部特征,并且有自身的獨(dú)有特征。
//答案:繼承
49、C++語(yǔ)言中使用函數(shù)重載、模板、__________等概念來(lái)支持多態(tài)性。
//答案:虛函數(shù)
50、在C++中有兩種類型的注釋,一種是C語(yǔ)言中使用的注釋符(/*···*/),另一種是______。
//答案://
51、在C++類中可以包含_______、_____和______三種具有不同訪問(wèn)控制權(quán)的成員。
//答案:public、protected、private
類和對(duì)象
52、類中的數(shù)據(jù)和成員函數(shù)默認(rèn)類型為_________。
//答案:私有
53、任何類中允許有三種權(quán)限的數(shù)據(jù)成員 、 、 。
//答案: public private protected
54、靜態(tài)數(shù)據(jù)成員在定義或說(shuō)明時(shí)前面要加上關(guān)鍵字 。
//答案:static
55、以下程序運(yùn)行的結(jié)果_________。
#include “iostream.h”
class CSample
{
private:
int i;
public:
CSample();
CSample(int val);
void Display();
~CSample();
};
CSample::CSample()
{
cout << “Constructor1” << endl;
i=0;
}
CSample:: CSample(int val)
{
cout << “Constructor2” << endl;
i=val;
}
void CSample::Display()
{
cout << ”i=” << i << endl;
}
CSample::~CSample()
{
cout << “Destructor” << endl;
}
void main()
{
CSample a, b(10);
a.Display();
b.Display();
}
//答案:
Constructor1
Constructor2
i=0
i=10
Destructor
Destructor
56、以下程序執(zhí)行的結(jié)果是_____________________。
#include <iostream.h>
class B
{
int x,y;
public:
B() {x = y = 0; cout << “Constructor1” << endl;}
B(int i) {x = i; y = 0; cout << “Constructor2” << endl;}
B(int i ,int j) {x = i; y = j; cout << “Constructor3” << endl;}
~B() {cout << “Destructor” << endl;}
void print() {cout << “x=” << x << “,y=” << y << endl;}
};
void main()
{
B *ptr;
ptr = new B[3];
ptr[0] = B();
ptr[1] = B(5);
ptr[2] = B(2,3);
for (int i=0;i<3;i++)
ptr[i].print();
delete[] ptr;
}
//答案:
Constructor1
Constructor1
Constructor1
Constructor1
Destructor
Constructor2
Destructor
Constructor3
Destructor
x=0,y=0
x=5,y=0
x=2,y=3
Destructor
Destructor
Destructor
57、以下程序執(zhí)行的結(jié)果是_____________________。
class B{
int x,y;
public:
B() {x = y = 0; cout << "Constructor1" << endl;}
B(int i) {x = i; y = 0; cout << "Constructor2" << endl;}
B(int i ,int j) {x = i; y = j; cout << "Constructor3" << endl;}
~B() {cout << "Destructor" << endl;}
void print() {cout << "x=" << x << ",y=" << y << endl;}
};
void main(){
B *ptr;
ptr = new B[2]; ptr[0] = B();
ptr[1] = B(5); delete[] ptr;
}
//答案:Constructor1
Constructor1
Constructor1
Destructor
Constructor2
Destructor
Destructor
Destructor
58、以下程序執(zhí)行結(jié)果是_____________。
#include <iostream.h>
class A
{
public:
A(int i=0) {m = i; cout << "Constructor" << m << endl; }
void set(int i) {m = i;}
void print() const {cout << m << endl;}
~A() {cout << "Destructor" << m << endl;}
private:
int m;
};
void fun(const A &c)
{
c.print();
}
void main()
{
fun(5);
}
//答案:
Constructor5
5
Destructor5
繼承和派生
59、以下程序執(zhí)行結(jié)果是________________。
#include <iostream.h>
class A
{
public:
A(int i, int j) {a = i; b = j;}
void move (int x, int y) {a += x; b += y;}
void show() { cout << “(“ << a << “,” << b << “)” << endl;}
private:
int a, b;
};
class B:private A
{
public:
B(int i, int j, int k, int l):A(i, j)
{
x =k; y = l;
}
void show()
{ cout << x << “,” << y << endl;}
void fun() {move (3,5);}
void f1() { A::show();}
private:
int x, y;
};
void main()
{
A e(1,2);
e.show();
B d(3,4,5,6);
d.fun();
d.show();
d.f1();
}
//答案:(1,2)
5,6
(6,9)
void main()
{
A e(1,2);
e.show();
B d(3,4,5,6);
d.fun();
d.A::show();
d.B::show();
d.f1();
}
//答案: (1,2)
(6,9)
5,6
(6,9)
60、以下程序執(zhí)行結(jié)果是________________
# include <iostream.h>
class A {
int a;
public:
A(int aa=0) { a=aa; }
~A() { cout <<"Destructor A!"<<a<<endl; }
};
class B:public A {
int b;
public:
B(int aa=0,int bb=0):A(aa) { b=bb; }
~B() { cout <<"Destructor B!"<<b<<endl; }
};
void main() {
B x(5),y(6,7); // 后定義的變量將先被釋放
}
//答案:
Destructor B! 7
Destructor A! 6
Destructor B! 0
Destructor A! 5
重載多態(tài)和虛函數(shù)
61、以下程序執(zhí)行結(jié)果是________________。
#include <iostream.h>
class base
{
public:
base()
{
cout << “構(gòu)造base子對(duì)象” << endl;
f();
}
virtual void f()
{
cout << “調(diào)用base::f()” << endl;
}
};
class derived : public base
{
public:
derived()
{
cout << “構(gòu)造derived對(duì)象” << endl;
f();
}
void f()
{
cout << “調(diào)用derived :: f()” << endl;
}
};
void main()
{
derived d;
}
//答案:
構(gòu)造base子對(duì)象
調(diào)用base::f()
構(gòu)造derived對(duì)象
調(diào)用derived :: f()
62、以下程序執(zhí)行結(jié)果是________________。
#include <iostream.h>
class base
{
public:
base() {
cout << “Constructor base subobject” << endl;
f(); }
virtual void f() {
cout << “Call base::f()” << endl; }
};
class derived : public base
{
public:
derived() {
cout << “Constructor derived object” << endl;
f(); }
void f() {
cout << “Call derived :: f()” << endl; }
};
void main(){
derived d;
}
//答案:
Constructor base subobject
Call base::f()
Constructor derived object
Call derived :: f()
63、以下程序執(zhí)行結(jié)果是________________。
#include <iostream.h>
class Sample
{
private:
int x;
public:
Sample() {x = 0;}
void disp()
{
cout << “x=” << x << endl;
}
void operator ++() {x += 10;}
};
void main()
{
Sample obj;
obj.disp();
obj ++;
cout << “執(zhí)行obj++之后” << endl;
obj.disp();
}
//答案:
x=0
執(zhí)行obj++之后
x=10
64、以下程序執(zhí)行結(jié)果
#include <iostream.h>
class base
{
public:
virtual void f1()
{ cout<<"f1 fuc of base"<<endl;}
virtual void f2()
{ cout<<"f2 fuc of base"<<endl;}
virtual void f3()
{ cout<<"f3 fuc of base"<<endl;}
void f4()
{ cout<<"f4 fuc of base"<<endl;}
};
class derive : public base
{
void f1()
{ cout<<"f1 fuc of derive"<<endl;}
void f2(int x)
{ cout<<"f2 fuc of derive"<<endl;}
void f4()
{ cout<<"f4 fuc of derive"<<endl;}
};
void main()
{
base obj1, *p;
derive obj2;
p = &obj1;
p->f1();
p->f2();
p->f3();
p = &obj2;
p->f1();
p->f2();
p->f4();
}
//答案:
f1 fuc of base
f2 fuc of base
f3 fuc of base
f1 fuc of derive
f2 fuc of base
f4 fuc of base
解析題:
*65、指出程序中的錯(cuò)誤,并予以改正(全部重寫(xiě))
#include “iostream.h”
class point
{int x1;
public:
int x2;
public:
point(int x, int y);
//......
};
void main()
{ point data(5,5);
cout << data.x1 << endl;
cout << data.x2 << endl;
}
//答案:構(gòu)造函數(shù)定義不正確,在main()中對(duì)數(shù)據(jù)成員x1訪問(wèn)不正確
改正:
#include “iostream.h”
class point
{int x1;
public:
int x2;
public:
point(int x)
{
x1=x;
}
void disp()
{
cout << x1 << endl;
}
};
void main()
{
point data(5);
data.disp();
cout << data.x2 << endl;
}
或
#include “iostream.h”
class point
{
int x1;
public:
int x2;
public:
point(int x)
{
x1=x;
}
int disp()
{
return x1;
}
};
void main()
{
point data(5);
cout << data.disp() << endl;
cout << data.x2 << endl;
}
66、分析以下程序的執(zhí)行的順序以及輸出結(jié)果
#include "iostream.h"
class Sample
{
public:
Sample()
{
cout << "構(gòu)造函數(shù)" << endl;
}
};
void fn(int i)
{
static Sample c;
cout << "i=" << i << endl;
}
void main()
{
fn(10);
fn(20);
}
//答案:
程序中fn(int i)函數(shù)中的static Sample c; 語(yǔ)句定義的是一個(gè)靜態(tài)對(duì)象,僅在函數(shù)第一次進(jìn)入時(shí)創(chuàng)建該對(duì)象,以后在進(jìn)入時(shí),c對(duì)象便始終存在,fn(int i)函數(shù)不再為其創(chuàng)建,所以程序執(zhí)行結(jié)果如下:
構(gòu)造函數(shù)
i=10
i=20
67、給出程序執(zhí)行結(jié)果
#include <iostream.h>
class MyDataType
{
protected:
int m_nData;
public:
MyDataType( ) {
m_nData = -1;
cout << "Constructor MyDataType" << endl; }
MyDataType & operator = (int n) {
m_nData = n;
return *this; }
MyDataType & operator = (MyDataType & obj) {
m_nData = obj.m_nData;
return *this; }
MyDataType & operator + (MyDataType & obj2) {
static MyDataType tempData;
tempData = m_nData + obj2.m_nData;
return tempData; }
operator int() { return m_nData; }//定義一個(gè)從MyDataType類型到int類型的轉(zhuǎn)換
};
void main()
{
MyDataType Obj1,Obj2;
Obj1 = 10;
Obj2 = Obj1;
MyDataType Obj3 = Obj1 + Obj2;
int nValue = (int)Obj3;
cout << "nValue = " << nValue << endl;
}
//答案:
Constructor MyDataType
Constructor MyDataType
Constructor MyDataType
nValue = 20
68、指出程序中的錯(cuò)誤,改正并簡(jiǎn)述原因
#include <iostream.h>
class Base
{
public:
void SetX(int i) {x = i;}
int GetX() {return x;}
private:
int x;
};
class Derived : public Base
{
public:
void SetY(int i) {y = i;}
int GetY() {return y;}
private:
int y;
};
void main()
{
Base *p;
Base b_ob;
Derived d_ob;
p = &b_ob;
p->SetX(11);
cout << "base object x:" << p->GetX() << endl;
p = &d_ob;
p->SetX(55);
cout << "base object x:" << p->GetX() << endl;
p->SetY(99);
cout << "derived object y:" << p->GetY() << endl;
}
//答案:p->SetY(99)是錯(cuò)誤的,改為d_ob.SetY(99)
基類指針雖然可以指向派生類的對(duì)象,但是只可以訪問(wèn)派生類中從該基類繼承下來(lái)的的那些成員(如GetX())。基類指針指向的對(duì)象只認(rèn)識(shí)基類,而不知道關(guān)于派生類的成員信息。
69、分析程序給出運(yùn)行結(jié)果
#include <iostream.h>
class Base
{
public:
virtual void show()
{cout<<"Parent class.\n";}
};
class First: public Base
{
public:
void show()
{cout<<"First Derived class.\n";}
};
class Second :public Base
{
public:
void show()
{cout<<"Second Derived class.\n";}
};
void main()
{
Base b1, *ptr;
First f1;
Second s1;
ptr = &b1;
ptr->show();
ptr = &f1;
ptr->show();
ptr = &s1;
ptr->show();
}
//答案:
Parent class.
First Derived class.
Second Derived class.
70、分析程序給出運(yùn)行結(jié)果,說(shuō)明原因
#include <iostream.h>
class Base
{
public:
void show()
{cout<<"Parent class.\n";}
};
class First: public Base
{
public:
void show()
{cout<<"First Derived class.\n";}
};
class Second :public Base
{
public:
void show()
{cout<<"Second Derived class.\n";}
};
void main()
{
Base b1, *ptr;
First f1;
Second s1;
ptr = &b1;
ptr->show();
ptr = &f1;
ptr->show();
ptr = &s1;
ptr->show();
}
//答案:
Parent class.
Parent class.
Parent class.
由于基類中show函數(shù)沒(méi)聲明成虛函數(shù),這時(shí)的函數(shù)調(diào)用是在編譯時(shí)靜態(tài)聯(lián)編的。
posted on 2011-05-31 22:05
DoubleW 閱讀(2749)
評(píng)論(0) 編輯 收藏 引用