12软件工程面向对象程序设计(C++) 实验3多态性指导书
- 格式:doc
- 大小:38.50 KB
- 文档页数:4
实验3 多态性
3.1实验目的和要求
(1) 了解多态性的概念。
(2) 掌握运算符重载的基本方法。
(3) 掌握虚函数的定义和使用方法。
(4) 掌握纯虚函数和抽象类的概念和用法。
3.2实验内容与步骤
一、构建一个复数类Complex,试对下列几个运算符进行重载:++,=,!=,+,-,==,其中要求要有成员重载形式和友元重载形式,而且,++运算符要求实现先加和后加两种形式。
该类定义原型说明:
class complex
{
public:
complex(double r=0,double i=0);
complex &operator +(complex &c);
complex operator -(complex &c);
complex operator *(complex &c);
friend complex operator /(complex &c1,complex &c2);
friend int operator ==(complex &c1,complex &c2);
friend int operator !=(complex &c1,complex &c2);
//friend complex operator++(complex &c);
complex operator++();
complex operator++(int);
void disp();
private:
double real;
double imag;
};
二、建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。将分数显示成
“a/b”形式的输出函数。成员函数包括约分、通分、加、减、乘、除、求倒数、比较大小、显示和输入。完成以上所有成员函数并在主函数中进行检验。
#include
using namespace std;
class Fraction{
int numerator,denominator;
int common_divisor(); //计算最大公约数 void contracted(); //分数化简
public:
Fraction(int=0,int=1);
Fraction(Fraction&);
Fraction operator +(Fraction);
Fraction operator -(Fraction);
Fraction operator *(Fraction);
Fraction operator /(Fraction);
bool operator>=(Fraction);
bool operator<=(Fraction);
bool operator==(Fraction);
bool operator<(Fraction f){return !(operator>=(f));}
bool operator>(Fraction f){return !(operator<=(f));}
bool operator!=(Fraction f){return !(operator==(f));}
Fraction Updown();
void Set(int=0,int=1);
void disp(){cout<<"fraction= "< }; 三、编写一个程序,用于进行集合的并、差和交运算。例如输入整数集合{9 5 4 3 6 7}和{2 4 6 9 },计算出它们进行集合的并、差和交运算后的结果。 【提示】 (1)可用以下表达式实现整数集合的基本运算: s1+s2 两个整数集合的并运算 s1-s2 两个整数集合的差运算 s1*s2 两个整数集合的交运算 (2)参考以下Set类的框架,用于完成集合基本运算所需的各项功能。 class set{ public: set::set(); void set::input(int d); int set::length(); int set::getd(int i); void set::disp(); set set::operator+(set s1); set set::operator-(set s1); set set::operator*(set s1); set set::operator=(set s1); protected: int len; int s[MAX]; }; 四、定义描述字符串的类String,编写字符串运算符“+=”的重载函数,使运算符“+=”用于两个字符串联接操作,即用str1+=str2实现字符串函数strcat(str1,str2)的操作功能。要求分别用成员函数与友元函数编写运算符重载函数。在主函数中定义字符串对象 s1("software and ")与s2("hardware"),进行s1+=s2的字符串联接,并输出s1、s2的值。 五、编写程序,定义抽象基类Shape(形状),由它派生出3个派生类: Circle(圆形)、Rectangle(矩形)和Square (正方形),用函数函数ShowArea()分别显示各种图形的面积,最后还要显示所有图形的总面积。要求用基类指针数组,使它的每一个元素指向一一个派生类对象。 3.3 实验示例:用抽象类实现的菜单程序。 # include < iostream. h > class Menu { public: virtual void action ( ) = 0; }; class item1: public Menu { public: virtual void action () { cout« "新建文件" «endl;} }; class item2: public Menu {public : virtual void action ( ) {cout« "打开文件 " «endl;} }; class item3: public Menu {public: virtual void action ( ) {cout« "保存文件" «endl;} }; class item4: public Menu {public: virtual void action() {cout«关闭文件" «endl;} }; void main() { int select; Menu * Fptr[4]; Fptr[O] = new item1; Fptr[1] = new item2; Fptr[2] = new item3; Fptr[3] = new item4; Do { cout« " 1 new file " « endl; cout« " 2 open file " « endl; cout« " 3 save file " « endl; cout« "4 close file " « endl; cout« "O exit " «endl; cin >> select; if( select > = 1 && select < = 4) Fptr[select-1]->action(); }while( select! =0); for(int i=0;i<=3;i++ ) { delete Fptr[i]; }