C++面向对象程序设计实验指导书 实验八
实验八 多态性—类型转换与虚函数
8.1 实验目的
1.理解掌握运算符[]、()的重载;
2.理解类型转换,掌握类型转换函数的设计和使用; 3.理解和掌握虚函数的作用;
4.掌握利用虚函数实现C++的运行时多态性; 5.理解纯虚类和抽象类。
8.2 实验内容 8.2.1程序阅读
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include
class CComplex {
public:
CComplex(double r = 0, double i = 0) { real = r; imag = i; }
int operator int() { return (int)real; }
void Display(void) { cout << \ << real << \ << imag << \ << endl; }
protected:
double real; double imag; };
27
C++面向对象程序设计实验指导书 实验八
class CVector {
public:
CVector(CComplex &obj1, CComplex &obj2, CComplex &obj3, CComplex &obj4) { objArray[0] = obj1; objArray[1] = obj2; objArray[2] = obj3; objArray[3] = obj4; }
friend CComplex &operator[](CVector obj, int n); private:
CComplex objArray[4]; };
CComplex &operator[](CVector obj, int n) {
if(n<0 || n>3) { cout<<\< return obj.objArray[n]; } void main() { CComplex c1(1.1, 1.1); CComplex c2(2.2, 2.2); CComplex c3(3.3, 3.3); CComplex c4(4.4, 4.4); CVector v(c1,c2,c3,c4); v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display(); v[0] = 5.5; ----------------------------------------------------------① v[1] = CComplex(6.6); -------------------------------------------② v[2] = int(CComplex(7.7)); --------------------------------------③ v[3] = int(CComplex(8.8,9.9)); ----------------------------------④ 28 C++面向对象程序设计实验指导书 实验八 } v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display(); 问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。 问题二:①处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题三:②处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题四:解释③处的转换过程。 问题五:解释④处的转换过程。 8.2.2 程序设计 1.编写一个程序计算三角形、正方形和圆形的面积,要求抽象出一个基类base,在其中说明一个虚函数,用来求面积,并利用单接口,多实现版本设计各图形面积的方法。 8.3思考题 1.设计一个汽车类Motor,该类具有可载人数、轮胎数、马力数、生产厂家和车主五个数据成员,根据Motor类派生出Car类、Bus类和Truck类。其中Bus类除继承基类的数据成员外,还具有表示车厢节数的数据成员Number;Truck类除继承基类的数据成员之外,还具有表示载重量的数据成员Weight。每个类都具有成员函数Display,用于输出各类对象的相关信息。要求设计一个统一的显示相关信息的全局函数ShowInfo在主函数种调用,主函数中不直接调用类里面的Display函数。 29 C++面向对象程序设计实验指导书 实验九 实验九 模板类的构造 9.1 实验目的 1.理解和应用类模板和函数模板; 2.复习数据结构的相关知识; 3.学习用C++的编程思想实现链表类。 9.2 实验内容 9.2.1程序阅读 1.理解下面的动态数组类模板,它由一系列位置连续、任意数量相同类型的元素组成,其元素个数可在程序运行时改变,并完成该类中没有完成的成员函数(不允许改变已有代码),并设计主函数,实现对该模板类的功能测试。 #include //容错处理 enum ErrorType { invalidArraySize,memoryAllocatetionError,indexOutOfRang }; char *errorMsg[] = { \, \, \ }; template private: T* alist; int size; void Error(ErrorType error) const;//输出错误信息 public: Array(int sz=50);//构造函数 30 C++面向对象程序设计实验指导书 实验九 Array(const Array Array template Array if(sz <= 0) Error(invalidArraySize); size = sz; alist = new T[size]; if(alist == 0) Error(memoryAllocatetionError); } template Array int n = X.size; size = n; alist = new T[n]; if(alist == 0) Error(memoryAllocatetionError); T* srcptr = X.alist; T* destptr = alist; while(n--) *destptr++ = *srcptr++; } template delete[] alist; } template Array int n = rhs.size; if(size != n) { 31 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++面向对象程序设计实验指导书(7)在线全文阅读。
相关推荐: