1、实验六 运算符重载(2学时)
一、实验目的
1.掌握运算符重载的规则。
2.掌握用成员函数、友元函数重载运算符的特点。
3.掌握几种常用的运算符重载的方法。
二、实验内容
1.阅读下面的程序,写出程序运行的结果。
(1)
#include
2、 &out,ABC& f)
{
out<<"a="<
3、ator++(){ ++n; return *this; }
Number& operator++(int){ n++; return *this;}
friend Number &operator--(Number &o);
friend Number &operator--(Number o,int);
void display(){cout<<"This Number is: "< 4、int){o.n--; return o; }
int main(){
Number N1(10);
++ ++ ++N1;
N1.display();
N1++;
N1.display();
--N1;
N1.display();
N1-- -- --;
N1.display();
return 0;
}
2.设计并实现一个日期类Date,要求:
(1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是2009.1.1。
(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以 5、是两位数据。
(3)可以动态地设置年、月、日。
(4)可以用运算符= =、!=、<和>对两个日期进行比较(定义其中之一即可)。
(5)可以用运算符++、--、+=、-=等完成天数的加减一天或若干天的操作(定义其中之一即可)。
(6)Date类必须能够正确表达日期,不会出现类似于13月,32日一类的情况。Date类还必须处理闰年的问题,闰年包括:所有能被400整除的年份,以及能被4整除同时又不能被100整除的年份。(选做)
(7)写出主函数对该类进行测试。
下面两题选做一题
3.下面是一个数组类CArray的定义。要求:
(1)在此基础上增加print()成员函数打印数组,
6、
(2)重载“=”、“+”、“-” 运算符使之能对该数组类对象进行赋值、加减运算。
(3)写出主函数对该类进行测试。
class CArray
{private:
int* p_arr;
int size;
public:
CArray(); //缺省构造函数
CArray(int* p_a,int s); //构造函数
CArray(const CArray &r_other);//复制构造函数
~CArray();//析构函数
int operator[](int pos) const; //访问数组元素值的下标运算符重载函数
i 7、nt& operator[](int pos); //设置数组元素值的下标运算符重载函数
Carray &operator=(const Carray &other)//赋值运算符“=”重载函数
Carray &operator+(const Carray &other) //加运算符“+”重载函数
Carray &operator-(const Carray &other) //减运算符“-”重载函数
void print() const;
};
CArray:: CArray() { p_arr=NULL; size=0;}
CArray:: CAr 8、ray(int* p_a,int s)
{
if(s>0)
{ size=s; p_arr=new int[size];
for(int i=0;i 9、t i=0;i 10、tor[](int pos)
{
if(pos>=size) return p_arr[size-1];
if(pos<0) return p_arr[0];
return p_arr[pos];
}
4.下面是一个自定义字符串类的声明。请写出该类所有成员函数的类外定义代码。
class string
{private:
unsigned buflen;
char * buffer;
public:
string();//构造函数
string(unsigned);
string(char);
string(const char*);
st 11、ring(const string &);//复制构造函数
~string();//析构函数
//重载赋值运算符
string& operator=(const string &right);
string& operator+=(const string &right);
char *operator+=(const char *right);
friend string operator+(const string & left,const string & right); //字符串连接
string operator()(unsigned start,unsigned len); //取子串
unsigned length()const; //求字符串长度
char & operator[](unsigned index)const; //访问单个字符
int compare(const string &)const; //字符串比较
operator const char *()const; //到普通c字符串的转换
friend ostream & operator<<(ostream &,string &);//字符串的输出
};






