c++实验答案

};

void main(void) { int no;

char name[8],sex,birth[10],major[10],class1[10],depa[10],title[10]; float eng,math,salary; Student *s; Employee *e;

cout<<\

cin>>name>>sex>>birth>>class1>>no>>major>>eng>>math; s=new Student(name,sex,birth,class1,no,major,eng,math); cout<<\ s->Print();

cout<<\

cin>>name>>sex>>birth>>depa>>title>>salary; e=new Employee(name,sex,birth,depa,title,salary); cout<<\ e->Print(); }

实验十三 1.实验目的 通过本次实验

(1)理解友元函数与运算符重载函数的概念; (2)学会友元函数的定义与使用方法;

(3)掌握运算符重载函数的定义与使用方法; 2.实验要求

(1)编写实验程序

(2)在VC++运行环境中,输入源程序 (3)编译运行源程序

(4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容

(1)定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。

(2)定义一个数组类Array,其私有数据成员为整型一维数组a[10]。通过构造函数给a[10]赋初值。用Show函数显示a[10]的元素值。用成员函数重载运算符“+”,直接实现两个一维数组对应元素相加的运算。在主函数中定义数组a、b分别为: int a[10]={1,2,3,4,5,6,7,8,9,10}; int b[10]={4,5,6,7,8,9,10,11,12,13};

用Array定义三个数组对象arr1(a)、arr2(b)、arr3,执行arr3=arr1+arr2运算,输出arr3的数组元素值。

类似地,用友元函数重载运算符“+=”,实现复合赋值运算:arr1+=arr2,并输出arr1的元素值。

(3)定义一个人民币类Money,类中数据成员为元、角、分。用成员函数与友元函数重载

“――”运算符,实现人民币对象的减1运算。在主函数中定义人民币对象m1=10元8角5分及对象m2、m3。对m1作前置“――”并赋给m2。对m1作后置“――”并赋给m3。显示m1、m2、m3的结果。

(4)定义描述字符串的类String,编写字符串运算符“+=”的重载函数,使运算符“+=”用于两个字符串联接操作,即用str1+=str2实现字符串函数strcat(str1,str2)的操作功能。要求分别用成员函数与友元函数编写运算符重载函数。在主函数中定义字符串对象

s1(\与s2(\,进行s1+=s2的字符串联接,并输出s1、s2的值。 4.解答参考 (1)成员函数

# include class Complex { private:

float Real,Image; public:

Complex(float r=0,float i=0) { Real=r;Image=i;}

void Show(int i)

{ cout<<\ void operator +=(Complex &c) { Real=Real+c.Real; Image=Image+c.Image; } };

void main(void)

{ Complex c1(10,20),c2(15,30); c1.Show(1); c2.Show(2); c2+=c1; c2.Show(2); }

友元函数

# include class Complex { private:

float Real,Image; public:

Complex(float r=0,float i=0) { Real=r;Image=i;}

void Show(int i)

{ cout<<\ friend void operator +=(Complex &c1,Complex &c2); };

void operator +=(Complex &c1,Complex &c2) { c1.Real=c1.Real+c2.Real;

c1.Image=c1.Image+c2.Image; } void main(void)

{ Complex c1(10,20),c2(15,30); c1.Show(1); c2.Show(2); c2+=c1; c2.Show(2); }

程序运行结果: c1=10+20i c2=15+30i c2=25+50i (2) (3)

# include # include class Money { private:

float Yuans,Jiaos,Fens; public:

Money() //定义默认的构造函数 { Yuans=Jiaos=Fens=0;}

Money(float y,float j,float f)

{ Yuans=y; Jiaos=j; Fens=f; }

Money operator --( ); Money operator --( int );

void Show(void)

{ cout<

Money Money::operator -- () {

if (Fens==0) { if (Jiaos==0)

{ if (Yuans==0)

cout<<\ else

Yuans--;

Jiaos=9; } else

Jiaos--; Fens=9; }

else Fens--;

return *this; //返回自加后的人民币对象值 }

Money Money::operator-- (int )

{ Money temp=*this; //将自加前人民币对象值存入临时对象temp if (Fens==0) { if (Jiaos==0)

{ if (Yuans==0)

cout<<\ else

Yuans--; Jiaos=9; } else

Jiaos--; Fens=9; }

else Fens--; return temp; }

void main( void)

{ Money m1(10,8,5),m2,m3; cout<<\ m1.Show(); m2= --m1; m3= m1--; cout<<\ m2.Show(); cout<<\ m3.Show(); cout<<\ m1.Show(); }

程序运行结果:

m1= 10元8角5分 m2= 10元8角4分 m3= 10元8角4分 m1= 10元8角3分

(4)成员函数

# include # include

class String //定义字符串类 { protected : int Length; char *Sp; public:

String() //定义缺省的构造函数 {Sp=0;Length=0;}

String(const char *s) { Length=strlen(s);

Sp=new char[Length +1]; strcpy(Sp,s); }

~String() { if (Sp) delete [] Sp;}

void Show() { cout<

String operator +=(String &s) { String t;

t.Length=Length+s.Length; t.Sp=new char[t.Length+1]; strcpy(t.Sp,Sp); strcat(t.Sp,s.Sp); return t; } };

void main (void)

{ String s1(\ s1.Show(); s2.Show(); s2+=s1; s2.Show(); }

友元函数

# include # include

class String { protected : int Length; char *Sp; public:

//定义初始化构造函数 //定义析构函数 //定义显示字符串函数 //定义字符串拼接成员函数 //定义字符串类

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4