当前位置:
文档之家› 实验三 多态与虚函数及运算符重载
实验三 多态与虚函数及运算符重载
#include<iostream>
using namespace std;
class shape
{
public:
virtual float area()=0;
}
算
法
描
述
及
实
验
步
骤
各题目算法描述及实验步骤:
题目1主要考察运算符的重载、构造函数的调用和类的对象的使用。
算法描述及实验步骤:首先在Time类定义私有成员时分秒和公有成员函数,其中包括运算符的重载,其返回值为Time型;然后依次编写重载函数,需要根据时间加减是时、分、秒的进位算法,同时调用构造函数使得到的新数据可以直接返回;最后在主函数中编写界面和选项,在不同的选项中调用不同的函数,并使用显示函数输出结果。
{
a = x;
b = y;
c = z;
}
float area()
{
float s;
s = (a + b + c)/2;
return sqrt(s * (s - a) * (s - b) * (s - c));//海伦公式,求根公式在math.h头文件中
}
private:
float a,b,c;
};
class circle:public shape//以共有继承的方式定义一个圆形派生类
}
minute = minute%60;
hour = (A.hour + hour)%24;
return Time(hour,minute,second);//调用构造函数,得到的新时间直接返回
}
Time Time::operator-(Time B)
{
if(second < B.second)
{
minute--;
friend double operator+(Triangle t1,Triangle t2);//运算符“+”重载友元函数
private:
int a,b,c;
double s;
};
Triangle::Triangle(int new_a,int new_b,int new_c)
{
a=new_a;
}
int main()
{
int hour,minute,second;
Time A,B;//定义两个Time类的对象
char ch;
while(1)
{
system("cls");
cout<<"a.input time"<<endl;
cout<<"b.add time"<<endl;
cout<<"c.sub time"<<endl;
}
second = (second - B.second)%60;
if(minute < B.minute)
{
hour--;
}
minute = (minute - B.minute)%60;
hour = (hour - B.hour)%24;
return Time(hour,minute,second);
{
A *p,a(1);
B b(2,3);
p = &a;
p->dispa();
p = &b;
p->dispa();//原为p->dispb(),基类指针指向派生类对象只能访问基类的成员函数
return 0;
}
题目4:
#include<iostream>
#include<math.h>
#define PI 3.1415
输出结果如下:
题目1:
题目2:
题目3:
题目4:
总
结
实验三主要考察了虚函数和运算符重载成员函数,应着重理解虚函数在什么情况下使用。通过实验三的再学习现作如下总结:题目1应注意重载函数的返回值为Time型,这样可以用时分秒的形式返回数据。题目2的重点是重载运算符“+”,用来求两个三角形对象的面积之和,利用友元函数重载运算符“+”并返回面积之和。题目3的重点是派生类基类成员函数的访问,此题中基类指针指向派生类对象只能访问基类的成员函数,派生类等的共有成员函数和私有数据成员的访问一直是易错点,应特别注意。题目4的重点是虚函数用基类的指针或基类的引用,可以动态调用派生类内同名的函数,方便简洁并且提高效率。这一部分题目较为复杂,除了需要算法分析,还要仔细编写,确保思路清晰,同时灵活使用友元函数、虚函数、类的对象,尽可能使程序简化。
getch();
}
else if(ch == 'b')
{
cout<<"please input add time"<<endl;
cin>>hour>>minute>>second;
B = Time(hour,minute,second);
A = A + B;
A.showtime();
getch();
t2.area();
t2.display();
s=t1+t2;//用重载运算符实现面积相加
cout<<"两个三角形面积和为:"<<s<<endl;
}
题目3:
#include<iostream>
using namespace std;
class A
{
public:
A(int i)
{
x = i;
}
void dispa()
附
录
实验三各题目程序代码如下:
题目1:
#include<iostream>
#include<conio.h>
using namespace std;
class Time
{
private:
int hour,minute,second;
public:
Time(){}//缺省构造函数
Time(int shi,int fen,int miao)//构造函数
}
Time Time::operatoቤተ መጻሕፍቲ ባይዱ+(Time A)
{
second= A.second + second;
if(second >= 60)
{
minute++;
}
second = second%60;
minute = A.minute + minute;
if(minute >= 60)
{
hour++;
b=new_b;
c=new_c;
}
double Triangle::area()//计算三角形面积
{
double p;
p=(a+b+c)/2.0;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return 0;
}
void Triangle::display()
{
cout<<"三角形的三条边为:"<<a<<","<<b<<","<<c<<endl;
C++面向对象程序设计课程实验报告
课程名称
C++面向对象程序设计
班级
实验日期
2014.4.25
姓名
学号
实验成绩
实验名称
实验三多态与虚函数及运算符重载
实
验
目
的
及
要
求
1.理解运算符重载的重要性及好处。
2.理解哪些运算符可以重载而哪些不能重载。
3.理解单目运算符和双目运算符重载时参数的特点。
4.掌握一般运算符及特殊运算符重载的方法。
主函数为:
int main()
{
shape *p;
triangle B(4,3,6);//定义三角形类的对象
circle C(2.0);//定义圆形类的对象
p = &B;
show(p);
p = &C;
show(p);
return 0;
}
调
试
过
程
及
实
验
结
果
将四段代码分别在Visual C++ 6.0中进行程序调试,更改代码错误后编译通过,并输出调试后的最终结果。
cout<<"面积为:"<<s<<endl;
}
double operator+(Triangle t1,Triangle t2)
{
return t1.s+t2.s;
}
void main()
{
double s;
Triangle t1(3,4,5),t2(6,8,10);
t1.area();
t1.display();
{
hour = shi;
minute = fen;
second = miao;
}
Time operator+(Time A);//运算符重载
Time operator-(Time A);
void showtime();