16、之后添加適當的語句。
(2) 完成默認構造函數Date的定義,使Date對象的默認值為:year=1,month=1,day=1,請在注釋"http://* *2**"之后添加適當的語句。
(3) 完成重載構造函數Date(inty,intm,intd)的定義,把數據成員year,month和day分別初始化為參數y,m,d的值,請在注釋"//**3* *"之后添加適當的語句。
(4) 完成成員函數print的類外定義,使其以"年-月-日"的格式將Date對象的值輸出到屏幕上。請在注釋"//**4 **"之后添加適當的語句。
注意:除在指定位置添加語句之外,請不要改動程序中的其他內源程序
17、文件main.cpp清單如下:
//main.cpp
#include
classDate
{
public:
//**2**
Date(inty,intm,intd)
{
//**3**
}
voidprint()const;
private:
//datemembers
//**1**
};
voidDate::print()const
{ //**4**
}
intmain()
{ Datenational_day(1949,10,1);
national_day
18、.print();
return0;
}
3、用C++語言定義MyString(包括成員函數的實現代碼),使之能符合下面程序及在注釋中描述的運行結果的要求:
main()
{
MyString s1 = "0123456789", s2(5), s3;
s1.display(); // 此時顯示出: <0123456789>
s2.display(); // 此時顯示出(<>之間是五個空格): < >
s3.display(); // 此時顯示出: <>
s3 = s1;
s
19、3.display(); // 此時顯示出: <0123456789>
s2 = s1[2];
s2.display(); // 此時顯示出: <23456789>
s1.display(); // 此時顯示出: <0123456789>
s3 = s2++;
s2.display(); // 此時顯示出: <3456789>
s3.display(); // 此時顯示出: <23456789>
}
參考答案及評分標準
一. 選擇題(每
20、小題2分,共20分)
1、C 2、A 3、D 4、C 5、C
6、B 7、C 8、A 9、D 10、A
二.判斷題(每小題1分,共10分)
1、 2、√ 3、√ 4、 5、
6、 7、 8、 9、 10、√
三.填空題(每空1分,共10分)
1、 基類成員、類對象成員、非類對象成員
2、const
3、friend void F();
4、析構函數
5、8
6、指針、對象、虛函數
四.讀程序并寫出程序的運行結果(每題5分,共20分)
1、a=10,b=2
21、 a=10,b=10
2、Constructor
Copy_ Constructor
A=12,B=23
Constructor
A=5,B=6
Destructor
Destructor
Destructor
3、B’constructor called.
C’constructor called.
5
6
C’destructor called.
B’destructor called.
4、i=0,k=2
i=0,k=2
五.編程題(第1題9分,第2題16分,第3題15分,共40分)
1、
22、void ~A(){}:析構函數沒有返回值,可改為~A(){};
A a;:沒有定義無參構造函數,可改為A a(10);(括號中可以是任意整數。)
a.m+=10;:不能在類外訪問類的私有成員,將數據成員m的訪問權限改為public。
2、
//**1**
int year; int month; int day;
//**2**
Date()
{
year=1;month=1;day=1;
}
//**3**
year=y;month=m;day=d;
//**4**
cout<
23、ndl;
3、
class MyString {
char cpBody[81];
public:
MyString(const char* p = NULL);
MyString(int i);
MyString& operator=(const MyString& s)
{ strncpy(cpBody, s.cpBody, 80); return *this; }
MyString& operator[](int i);
MyString& operator++(int i)
{ static
24、MyString s; s = *this;
*this = (cpBody[0] == ‘\0‘) ? *this : (*this)[1]; return s; }
void display() { printf("<%s>\n", cpBody); }
};
MyString::MyString(const char* p)
{
if (p == NULL)
cpBody[0] = ‘\0‘;
else
strncpy(cpBody, p, 80);
}
MyString::MyString(int i)
25、
{ int j;
for (j = 0; j < i && j < 80; j++)
cpBody[j] = ‘ ‘;
cpBody[j] = ‘\0‘;
}
MyString& MyString::operator[](int i)
{ static MyString s;
int j;
s = *this;
for (j = i; cpBody[j] != ‘\0‘; j++)
s.cpBody[j-i] = s.cpBody[j];
s.cpBody[j-i] = ‘\0‘;
return s;
}
第 11 頁 共 11 頁