c++ 基于时间类的运算符重载实验
C++实验三运算符重载

float score;
};
Student::Student(int n,char nam[],char s,float so)
{num=n;
strcpy(name,nam);
sex=s;
score=so;
}
class Teacher
{public:
Teacher(){}
Teacher(Student&);
{
ARRAY c;
int i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
c.array[i][j]=a.array[i][j]+b.array[i][j];
cout<<c.array[i][j];
cout<<" ";
}
cout<<endl;
}
return c;
}
/*COMPLEXoperator-(COMPLEX a,COMPLEX b)
cout<<"student1:"<<endl;
student1.display();
teacher2=Teacher(student1);
cout<<"teacher2:"<<endl;
teacher2.display();
return 0;
}
三、实验记录及结果
1.任务1
#include <iostream>
using namespace std;
TIME类,设计多个重载的构造函数C 程序

void Time::Print_12() {
cout<<hour<<':'<<minute<<':'<<second<<endl; } void Time::Print_24() {
cout<<hour<<':'<<minute<<':'<<second<<endl; } int main() {
பைடு நூலகம்
Time t1,t2(10,30,40); t1.Print_12(); t1.Print_24(); t2.Print_12(); t2.Print_24(); cout<<"t1+t2:"; t1.Addtime(t2); t1.Print_12(); cout<<"t1-t2:"; t1.Subtime(t2); t1.Print_12(); return 0; }
//设计一个 Time 类,设计多个重载的构造函数 //可以设置时间,进行时间的加减,按各种格式输出时间 #include <iostream> using namespace std; class Time {
int hour,minute,second; public:
Time(); Time(int hh,int mm,int ss); void Addtime(Time& t); void Subtime(Time& t); void Print_12(); void Print_24(); }; Time::Time() { hour=10; minute=15; second=20; } Time::Time(int hh,int mm,int ss) { hour=hh; minute=mm; second=ss; } void Time::Addtime(Time& t) { int time; time=hour*3600+minute*60+second+t.hour*3600+t.minute*60+t.second; hour=time/3600; minute=(time%3600)/60; second=(time%3600)%60; } void Time::Subtime(Time& t) { int time; time=hour*3600+minute*60+second-(t.hour*3600+t.minute*60+t.second); if(time<0) time=time*(-1); hour=time/3600; minute=(time%3600)/60; second=(time%3600)%60; }
C++实验21 运算符重载

实验21 运算符重载一、实验目的和要求1.理解运算符重载的作用。
2.掌握实现运算符重载的方法及几种特殊运算符的重载格式。
3.进一步锻炼针对类的编程能力。
二、实验准备☞知识点1.运算符重载定义的一般格式、基本概念。
2.运算符函数重载的两种形式。
3.通过成员函数实现运算符重载的一般格式。
4.通过友元函数实现运算符重载的一般格式。
5.”++”运算符的重载。
6.”=”赋值运算符的重载。
☞课前练习题1.重载运算”+”,实现a+b运算,则。
A.a必须为对象,b可为整数或实数B.a和b必须为对象C.b必须为对象,a可为整数或实数D.a和b均可为整数或实数2.在C++中,运算符的重载有两种实现方法,一种是通过成员函数来实现,另一种则通过_________来实现。
3.不能重载的5个运算符是:______、______、______、______、_________。
4.重载赋值运算符必须通过________函数实现。
5.用成员函数实现前置”--”运算符重载的一般格式为:_______________________________。
6.用友元函数实现后置”--”运算符重载的一般格式为:_______________________________。
☞分析1.有以下程序:#include<iostream.h>class C{private:double x;public:C( ) { x=0.0; }C(double a) { x=a; }friend C operator--(C t) //行A{t.x--;return t;}void show(){cout<<x<<endl;}};void main(){C c(5.6);(--c).show(); //行Bc.show(); //行C}请回答问题:①从行A 的形式上看,这是利用________函数实现__________运算符的重载。
[C++]运算符重载实验报告
![[C++]运算符重载实验报告](https://img.taocdn.com/s3/m/29d7be84bb68a98271fefabf.png)
+operator+(const COMPLEX &other): COMPLEX+operator-(const COMPLEX &other) : COMPLEX+operator-(): COMPLEX+operator=(const COMPLEX &other) : COMPLEX运行结果2. 程序的类结构图为:Tx,y:int+T(int a,int b)+&operator<<(ostream &os,T &a):friend ostream运行结果3. 程序的类结构图为:Shape+Area():virtual double const+PrintShapeName():virtual void const +Print():virtual void constPointx,y:int+Point(int=0,int=0)+SetPoint(int a,int b):void+GetX():int const+GetY():int const+PointShapeName():virtual void const +Print():virtual void constCircleradius:double+Circle(int x=0,int y=0,double r=0.0) +SetRadius(double r):void+GetRadius():double const+Area():virtual double const+Print():virtual void const+PrintShapeName():virtual void const 运行结果{cout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果【实例编程】运行结果。
C++实验5运算符重载

C++实验5运算符重载
实验5 运算符重载
一、实验目的
1.理解运算符重载概念;
2.学会使用运算符重载;
3.练习类和对象的使用。
二、实验内容
设计一个日期类Date,包括年、月、日等私有数据成员。
要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
三、实验要求
在Date类中设计如下重载运算符函数:
Date operator+(int days):返回某日期加上天数得到的日期
Date operator-(int days):返回某日期减去天数得到的日期int operator-(Date&b):返回两日期相差的天数
在实现这些重载运算符函数时调用以下私有成员函数:
leap(int):判断指定的年份是否为闰年
dton(Date &):将指定日期转换成从0年O月O日起的天数
ntod(int):将指定的0年O月O日起的天数转换成对应的日期
提示:可定义一个二维数组,存放闰年和非闰年每个月的天数,用于后面的计算,int day_tab[2][12]={{31,28,31,30,3l,30,3l,3l,30,31,30,31),
{31,29,31,30,31,30,31,31,30,31,30,31}};
// day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年。
C++程序设计运算符重载实验报告

二、实验内容与设计(主要内容,操作步骤、算法描述或程序代码)
本次实验主要实现以下内容:
【项目内容】
定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”“++”“--”“>”“<”,使之能用于复数的加、减、乘、除、自增、自减、比较大小。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积、商、自增、自减、比较大小。 提示:注意复数的乘、除法计算。
//重载*
Complexoperator*(Complex a,Complex b){
Complex t;
t.r=a.r*b.r-a.i*b.i;
t.i=b.r*b.i+b.i*b.r;
returnt;
}
//重载/
Complexoperator/(Complex a,Complex b) {
Complex t;
专业:计算机科学与技术年级班级:13计科
学生姓名:侯瑄学号:222013321210092
实验教师:陈睿
计算机与信息科学学院软件学院
实验项目名称
C++程序设计运算符重载
实验时间
2015.10.25
实验类型
□验证性□设计性□综合性
一、实验目的和要求
(1)掌握通过运算符重载实现多态性的方法;
(2)学会运算符重载的成员函数法和友元函数法;
cout<<r;
if(i>0) cout<<"+";
if(i!=0) cout<<i<<"i"<<endl;
C 运算符重载实例

1.赋值函数的重载示例程序代码如下#include "stdafx.h"#include <malloc.h>class stack{private:int *sp, top, max;void inflate();public:stack(int size = 10){sp = (int *)malloc(sizeof(int) * size); max = size;top = 0;}int pop();void push(int value);stack & operator=(stack & rightValue); };//栈的容量增倍void stack::inflate(){int index, *tp;tp = (int *)malloc(sizeof(int) * max * 2); for(index = 0; index < top; index++){tp[index] = sp[index];}max += max;free(sp);sp = tp;}//出栈int stack::pop(){if(top <= 0)throw 1;return sp[--top];}//入栈void stack::push(int value){if(top == max)inflate();sp[top++] = value;}//赋值函数stack & stack::operator=(stack & rightValue){top = rightValue.top;max = rightValue.max;sp = (int *)malloc(sizeof(int) * max);for(int index = 0; index < max; index++){sp[index] = rightValue.sp[index];}return *this;}void main(){stack x(100), y, z;z = y = x;}这里要注意的是赋值函数的返回值是stack &,这是为了实现链式表达式,如z = y = x;。
实验报告_实验6 运算符重载(2)

实验报告_实验6 运算符重载(2)(学生学号
_姓名)
实验目的:
1、掌握使用友元函数重载运算符方法。
2、熟悉=、[]、插入(<<)、提取(>>)等运算符重载的方法;
3、通过案例了解运算符重载的应用效果;
4、熟悉标准库string类的基本用法;
5、了解CTime等MFC类中的运算符重载情况。
实验内容
1、(基础题)掌握用友元函数重载运算符的方法
要求:在下列程序的适当位置添加代码,,使用友元函数方法实现下列运算符重载:
添加的程序代码:
2、(基础题)程序代码:
3、(基础题)运行下列程序,体会、理解长度可变整型数组类的功能与实现方法,并回答相关问题。
(1)该类有哪几个数据成员?各具有什么功能?
(2)构造对象时要完成哪些工作?
(3)调用成员函数push_back(int v)如何扩展数组大小?
(4)该类怎样实现数组对象的赋值运算?
4、(基础题)回答问题:
问题1:如何生成名为school,内容为:广州大学华软软件学院字符串?
问题2:能否将C语言中的字符串直接赋给string对象?
问题3:如何取出string str=”计算机系计算机科学与技术专业”中的“计算机科学与技术专业”子串?
问题4:string::npos表示什么?它有什么用途(写出一种即可)?
问题5:请说明insert()的基本用法。
问题6:请说明replace()的基本用法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验:定义一个时间类Time(时,分,秒),通过操作符重载实现:
时间的比较(==、!=、>、>=、<、<=)、时间增加/减少若干秒(+=、-=)
由题意,我定义了一个时间类Time,并且定义时(shi),分(fen),秒(miao)这些私有数据成员。
然后在main函数那里就可以通过构造函数定义一个时间了。
如下图所示:
由上图可知,我还对(==、!=、>、>=、<、<=)这些运算符进行了重载,返回bool类型的值。
而且,对于时间增加/减少若干秒,我用友元函数方式让一个时间类Time和int类型的数值(秒)相加。
下面我将对各种运算符重载做详细说明。
1:首先,我们来看“==”这个运算符重载。
它在Cpp文件里的定义如下:
由上可知,只有两个时间类的时,分,秒分别相等,才能返回一个true值,否则返回一个false值。
具体程序是通过条件语句构造而成,一目了然。
而我们在main函数里先定义两个时间类time0,time1。
分别让它们相等和不相等运行一次,实验结果如下:
2:我们来看“!=”这个运算符重载。
它在Cpp文件里定义如下:
由上可知,它就是把“==”运算符重载函数里的true和false互换而已,却起到了相反的效
果。
实验结果如下:
3:我们来看“>”这个运算符重载。
它在Cpp文件里定义如下:
由上可知,程序有点复杂了,不过思路还是很清晰的。
首先,通过比较两个时间类的时,看它们是否符合大于等于关系,如果没有则返回false值。
然后比较时是否相等,如果不相等则说明第一个类的时一定大于第二个类的时,则返回true值。
比较完时,如果在时相等的情况下,再来比较分,与比较时的程序相同,能轻松得出两个类的分的大小。
在分也相等的情况下,再来比较秒,如果大于则返回true值,否则返回false值。
至此,两类的时间大小可比较出来是否存在大于关系。
鉴于有多种情况,我就其中3种进行截图。
实验结果如下:
………………………………..
4:我们来看“>=”这个运算符重载。
它在Cpp文件里定义如下:
相比“=”这种情况,程序的量相差无几。
不过在一个地方做了改动。
最后在比较秒的时候,如果满足大于等于关系就能都返回true值。
实验结果如下:
…………………………..
5:我们来看“<”这个运算符重载。
它在Cpp文件里定义如下:
由上可知,因为“<”与“>”是相反关系,所以把“>”函数里的“>”号改为“<”号就行了。
实验结果如下:
…………………………………………….
6:我们来看“<=”这个运算符重载。
它在Cpp文件里定义如下:
鉴于“<=”与“>=”的关系也是相反的,故修改如同上面所示。
实验结果如下:
7:我们来看“+=”这个运算符重载。
它在Cpp文件里定义如下:
让一个int型的值与时间类的秒相加,如果溢出则进位到分,实验结果如下:
8:我们来看“-=”这个运算符重载。
它在Cpp文件里定义如下:
秒相减,如果不够则借位,实验结果如下所示:
至此,所有运算符重载操作解说完成,下面附上总的实验结果截图:
总结:
此次实验充分让我理解了运算符重载的含义,并且锻炼了我对C文件的管理能力,可能代码有需要简化的地方,希望能与老师多多交流。
也希望以后能多一点这样的实验。