《面向对象程序设计与C++》作业王涛教材:《C++语言程序设计》郑莉等著清华大学出版社2003.12注:作业中的题号为教材中对应的题号。第二章指针与内存分配1.voidFunc(charstr[100]){sizeof(str)=?}char*p=newchar[100];sizeof(p)=?为什么?2.voidGetMemory(char*p){p=newchar[100];}voidTest(){char*str=NULL;GetMemory(str);strcpy(str,“helloworld”);printf(“%s”,str);}请问运行Test函数会有什么样的结果?为什么?3.char*GetMemory(){charp[]=“helloworld”;returnp;}voidTest(){char*str=GetMemory();printf(“%s”,str);}请问运行Test函数会的到什么样的结果?为什么?4.voidGetMemory(char**p,intnum){*p=newchar[num];}voidTest(){char*str=NULL;GetMemory(&str,100);strcpy(str,“helloworld”);printf(“%s”,str);}请问运行Test函数后有什么样的结果?为什么?5.voidTest(){char*str=newchar[100];strcpy(str,“hello”);delete[]str;if(str!=NULL){strcpy(str,“world”);printf(“%s”,str);}}请问运行Test函数后会有什么样的结果?为什么?6.Emailaddressbookincludestwotypesofemailaddress:Generaladdress,includeinformation:emailaddress(unique),name,phonenumberGroupaddress,includeinformation:emailaddress(unique),name,listofaddress(eachaddressmaybeageneraladdressoragroupaddress).WriteanEmailaddressbookmanagementprogramwithC/C++language:Giveanemailaddress,finditsinformation.Ifgivenaddressisagroupaddress,shouldlistallthegeneraladdressesinthisgroup.Add/Removeoneemailaddress.Reademailaddressbookfromasourcefile.Saveemailaddressbooktoadestinationfile.第四章从C到C++教材P38811-3.使用I/O流以文本方式建立一个文件test1.txt,写入字符“已成功写入文件!”,用其他字处理程序(例如Windows记事本程序Notepad)打开,看看是否正确写入。11-6.声明一个dog类,包含体重合年龄两个成员变量及相应的成员函数,声明一个实例dog1,体重为5,年龄为10,使用I/O流把dog1的状态写入磁盘文件,再声明另一个实例dog2,通过读文件把dog1的状态赋给dog2。分别使用文本方式和二进制方式操作文件,看看有何不同;再看看磁盘文件的ASCII码有何不同。11-8.编写程序提示用户输入一个十进制整数,分别用十进制、八进制、和十六进制形式输出。11-9.编写程序实现如下功能:打开指定的一个文本文件,在每一个行前加行号。第五章类和对象教材P1234-9.设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,提供能计算矩形的面积的成员函数。4-10.设计一个用于人事管理的“人员”类。由于考虑到通用性,这里只抽象出所有类型人员都具有的属性:编号、性别、出生日期、身份证号等。其中“出生日期”声明为一个“日期”类内嵌字对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带默认形参值的成员函数、类的组合。4-12.声明一个datatype(数据类型)类,能处理包含字符、整形、浮点型三种类型的数据,给出其构造函数,并实现输出函数教材P1555-7.定义一个Cat类,拥有静态数据成员HowManyCats,记录Cat的对象个体数目;静态成员函数GetHowMany(),存取HowManyCats。非静态数据成员CatID记录当前对象的编号,成员函数GetCatID()存取CatID。设计程序测试这个类,生成若干个Cat对象,输出每个对象的数据成员值,体会静态成员和非静态成员的用法。5-14.定义Boat和Car两个类,两者都有weight属性,定义两者的一个友元函数totalWeight(),计算二者的重量和。附加题1.编写并测试一个单件类:该类能够控制系统中最多只存在一个该类的对象。一般的类,可以创建任意多个对象:classA{/*…*/};Aa1,a2,a[100];第七章重载教材P2818-5.编写并测试4个重载函数Double(x),返回值为输入参数的两倍;参数类型分别为int、long、float、double,返回值类型与参数类型一样。8-6.编写并测试一个类Rectangle,有itsLength(长)、itsWidth(宽)等数据成员,有重载的构造函数Rectangle()、Rectangle(intwidth,intlength)。8-7.编写并测试一个计数器Counter类,对其重载运算符+。8-13.编写并测试类Point,有数据成员x、y,为其定义友元函数实现重载+。附加题2.封装一个大整数类HugeInt,以支持任意大整数的四则运算,重载你认为需要的所有运算符,比如=,==,等等运算符。测试类是否正确:如计算n=100!+50!3.封装一个长浮点数类LongFloat,支持少数点后至少256位的高精度浮点数四则运算,重载你认为需要的所有运算符,比如=,==,等等运算符。测试类是否正确:如计算f=13/7–28/9。第八章继承教材P2517-5.声明一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有GetArea()函数计算对象的面积。使用Rectangle类创建一个派生类Square。7-10.声明一个object类,有数据成员weight及相应得存取操作函数,由此派生出box类,增加数据成员height和width及相应得存取操作函数,声明一个box对象,观察构造函数和析构函数的调用顺序。7-11.声明一个基类BaseClass,从它派生出类DerivedCalss,BaseClass有成员fn1()、fn2(),DerivedClass也有成员函数fn1()、fn2()。在主函数中声明DerivedClass,分别用DerivedClass的对象以及BaseClass和DerivedClass的指针来调用fn1()、fn2(),观察运行结果。附加题1.仿照示例程序08_05,用数组实现线性表类array,从array中派生子类stack和queue,实现出栈、入栈、出队列、入队列等操作第九章多态教材P2818-8.编写一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都声明Speak()成员函数,该函数在基类中被声明为虚函数,声明一个Dog类的对象,通过此对象调用Speak函数,观察运行结果。8-9.编写并测试抽象类Shape,在此基础上派生出Rectangle和Circle,二者都有计算对象面积的函数GetArea(),和计算对象周长的函数GetPerim()。8-11.声明一个基类BaseClass,从它派生出类DerivedClass。BaseClass有成员函数fn1()和fn2(),fn1()是虚函数,DerivedClass也有成员函数fn1()和fn2(),在主函数中声明一个DeriveClass的对象,分别用BaseClass和DerivedClass类型的指针指向该DerivedClass的对象,并通过指针调用fn1()和fn2(),观察运行结果。8-12.声明一个基类BaseClass,从它派生出类DerivedClass,在BaseClass中声明虚析构函数,在主函数中将一个动态分配的DeriveClass对象地址赋给一个BaseClass的指针,然后通过该指针释放对象。观察运行结果。若将BaseClass的析构函数声明为非虚函数函数,再观察运行结果。附加题1.参考示例程序09_04,编写图形管理程序:–能够管理直线,三角形,矩形,椭圆等图形–能够计算各图形的周长和面积–能够添加删除图形,显示已有图形信息。第十章模板与泛型编程附加题1.仿照示例程序10_01编写模板类matrix,支持任意数据类型的矩阵,重载+,-,*,=,==,[]等操作。利用int,double,类complex(包含实数real,虚数virt两部分)等数据类型测试所写matrix类接口.templateclassTclassmatrix{protected:introw,col;T*elems;public:matrix(intr,intc);/*…*/};