内容发布更新时间 : 2025/11/1 3:00:56星期一 下面是文章的全部内容请认真阅读。
};
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 
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 
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 
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  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  class String                                {  protected :      int Length;      char *Sp;    public:      //定义初始化构造函数       //定义析构函数   //定义显示字符串函数 //定义字符串拼接成员函数                     //定义字符串类