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];

}