當前位置:才華齋>IT認證>計算機等級>

2017年計算機二級C++常見考試試題

計算機等級 閱讀(3.28W)

C++中的算術運算子包括基本的算術運算子和自增、自減運算子。由算術運算子、運算元和括號構成的表示式稱為算術表示式。以下是yjbys小編收集的計算機二級C++常見考試試題,歡迎大家參考!

2017年計算機二級C++常見考試試題

  一、類物件陣列

類的物件和C++其他資料型別一樣,也可以為其建立陣列,陣列的表示方法和結構一樣。

#include iostream.h

class Date

{

int mo,da,yr;

public:

Date(int m=0,int d=0, int y=0) { mo=m; da=d; yr=y;}

void display() const { cout < };

int main()

{

Date dates[2];

Date today(12,31,2003);

dates[0]=today;

dates[0]lay();

dates[1]lay();

return 0;

}

1.類物件陣列和預設建構函式

在前面已經說過,不帶引數或者所有引數都有預設值的建構函式叫做預設建構函式。如果類中沒有建構函式,編譯器會自動提供一個什麼都不做的公共預設建構函式 。如果類當中至少有一個建構函式,編譯器就不會提供預設建構函式。

如果類當中不含預設建構函式,則無法例項化其物件陣列。因為例項花類物件陣列的格式不允許用初始化值來匹配某個建構函式的引數表。

上面的程式中,main()函式聲明瞭一個長度為2的Date物件陣列,還有一個包含初始化值的單個Date物件。接著把這個初始化的Date物件賦值給陣列中第一個物件,然後顯示兩個陣列元素中包含的日期。從輸出中可以看到,第一個日期是有效日期,而第二個顯示的都是0。

當聲明瞭某個類的物件陣列時,編譯器會為每個元素都呼叫預設建構函式。

下面的程式去掉了建構函式的預設引數值,並且增加了一個預設建構函式。

#include

class Date

{

int mo, da, yr;

public:

Date();

Date(int m,int d,int y) { mo=m; da=d; yr=y;}

void display() const { cout < };

Date::Date()

{

cout < mo=0; da=0; yr=0;

}

int main()

{

Date dates[2];

Date today(12,31,2003);

dates[0]=today;

dates[0]lay();

dates[1]lay();

return 0;

}

執行程式,輸出為:

Date constructor running

Date constructor running

12/31/2003

0/0/0

從輸出中可以看出,Date()這個預設建構函式被呼叫了兩次。

2.類物件陣列和解構函式

當類物件離開作用域時,編譯器會為每個物件陣列元素呼叫解構函式。

#include iostream.h

class Date

{

int mo,da,yr;

public:

Date(int m=0,int d=0,int y=0) { mo=m; da=d; yr=y;}

~Date() {cout < void display() const {cout< };

int main()

{

Date dates[2];

Date today(12,31,2003);

dates[0]=today;

dates[0]lay();

dates[1]lay();

return 0;

}

執行程式,輸出為:

12/31/2003

0/0/0

Date destructor running

Date destructor running

Date destructor running

表明解構函式被呼叫了三次,也就是dates[0],dates[1],today這三個物件離開作用域時呼叫的。

  二、靜態成員

可以把類的成員宣告為靜態的.。靜態成員只能存在唯一的例項。所有的成員函式都可以訪問這個靜態成員。即使沒有宣告類的任何例項,靜態成員也已經是存在的。不過類當中宣告靜態成員時並不能自動定義這個變數,必須在類定義之外來定義該成員。

1.靜態資料成員

靜態資料成員相當於一個全域性變數,類的所有例項都可以使用它。成員函式能訪問並且修改這個值。如果這個靜態成員是公有的,那麼類的作用域之內的所有程式碼(不論是在類的內部還是外部)都可以訪問這個成員。下面的程式通過靜態資料成員來記錄連結串列首項和末項的地址。

#include iostream.h

#include string.h

class ListEntry

{

public:

static ListEntry* firstentry;

private:

static ListEntry* lastentry;

char* listvalue;

ListEntry* nextentry;

public:

ListEntry(char*);

~ListEntry() { delete [] listvalue;}

ListEntry* NextEntry() const { return nextentry; };

void display() const { cout < };

ListEntry* ListEntry::firstentry;

ListEntry* ListEntry::lastentry;

ListEntry::ListEntry(char* s)

{

if(firstentry==0) firstentry=this;

if(lastentry!=0) lastentry- >nextentry=this;

lastentry=this;

listvalue=new char[strlen(s)+1];

strcpy(listvalue,s);

nextentry=0;

}

int main()

{

while (1)

{

cout <<nEnter a name ('end' when done): ;

char name[25];

cin >>name;

if(strncmp(name,end,3)==0) break;

new ListEntry(name);

}

ListEntry* next = ListEntry::firstentry;

while (next != 0)

{

next- >display();

ListEntry* hold = next;

next=next- >NextEntry();

delete hold;

}

return 0;

}

程式首先顯示提示資訊,輸入一串姓名,以end作為結束標誌。然後按照輸入順序來顯示姓名。建構函式將表項加入連結串列,用new運算子來宣告一個表項,但並沒有把new運算子返回的地址賦值給某個指標,這是因為建構函式會把該表項的地址賦值給前一個表項的nextentry指標。

這個程式和前面將的逆序輸出的程式都不是最佳方法,最好的方法是使用類模板,這在後面再介紹。

main()函式取得ListEntry::firstentry的值,開始遍歷連結串列,因此必需把ListEntry::firstentry設定成公有資料成員,這不符合面向物件程式的約定,因為這裡資料成員是公有的。

2.靜態成員函式

成員函式也可以是靜態的。如果一個靜態成員函式不需要訪問類的任何例項的成員,可以使用類名或者物件名來呼叫它。靜態成員通常用在只需要訪問靜態資料成員的情況下。

靜態成員函式沒有this指標,因為它不能訪問非靜態成員,所以它們不能把this指標指向任何東西。

下面的程式中,ListEntry類中加入了一個靜態成員函式FirstEntry(),它從資料成員firstentry獲得連結串列第一項的地址,在這兒,firstentry已經宣告為私有資料成員了。

#include iostream.h

#include string.h

class ListEntry

{

static ListEntry* firstentry;

static ListEntry* lastentry;

char* listvalue;

ListEntry* nextentry;

public:

ListEntry(char*);

~ListEntry() { delete [] listvalue;}

static ListEntry* FirstEntry() { return firstentry; }

ListEntry* NextEntry() const { return nextentry; };

void display() const { cout < };

ListEntry* ListEntry::firstentry;

ListEntry* ListEntry::lastentry;

ListEntry::ListEntry(char* s)

{

if(firstentry==0) firstentry=this;

if(lastentry!=0) lastentry- >nextentry=this;

lastentry=this;

listvalue=new char[strlen(s)+1];

strcpy(listvalue, s);

nextentry = 0;

}

int main()

{

while (1)

{

cout <<nEnter a name ('end' when done):;

char name[25];

cin >> name;

if(strncmp(name,end,3)==0) break;

new ListEntry(name);

}

ListEntry* next = ListEntry::FirstEntry();

while (next != 0)

{

next- >display();

ListEntry* hold = next;

next = next- >NextEntry();

delete hold;

}

return 0;

}

函式ListEntry::FirstEntry()是靜態的,返回靜態資料成員firstentry的值。

3.公有靜態成員

如果一個靜態成員象上面程式一樣是公有的,那麼在整個程式中都可以訪問它。可以在任何地方呼叫公有景泰成員函式,而且不需要有類的例項存在。但公有靜態成員函式不完全是全域性的,它不僅僅存在於定義類的作用域內。在這個作用域裡面,只要在函式名前加上類名和域解析運算子::就可以呼叫該函式。