2020年8月20日

 

第十一章  使用类

 

运算符重载

友元函数

重载<<运算符,以便用于输出

状态成员

使用rand()生成随机值

类的自动转换和强制类型转换

类转换函数

 

1.“轻松地使用这种语言。不要觉得必须使用所有地特性,不要在第一次学习时就试图使用所有的特性。”

 

2.运算符重载:

   是一种形式的C++多态

   运算符函数:operator op(argument-list)

   Time operator+(const Time&t)const;

   Time Time::operator+(const Time&t)const

   {

          Time sum;

          sum.minutes=minutes+t.minutes;

          sum.hours=hours+t.hours+sum.minutes/60;

          sum.minutes%=60;

          return sum;
    }

    total=coding.operator+(fixing);

    total=coding+fixing;

    t4=t1+t2+t3;也是合法的

    t4=t1.operator+(t2+t3);

    t4=t1.operator+(t2.operator+(t3));

 

    重载限制:

C++ Primer Plus第十一章摘要

         3.不能创建新运算符,例如,不能定义operator**函数来表示求幂。

        

C++ Primer Plus第十一章摘要

          

            可重载的运算符

C++ Primer Plus第十一章摘要

 

3.友元(友元函数,友元类,友元成员函数)

   友元函数:通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。创建友元函数的第一步是将其原型放在类声明之中,并在原型声明前加上关键字friend

   虽然友元函数是在类声明中声明的,但它不是成员函数,因此不能使用成员运算符来调用。

   虽然不是成员函数,但它与成员函数的访问权限相同。

   它不是成员函数,不需要类限定符,不需要在定义中使用关键字friend

   友元函数是类的扩展接口的组成部分。

   

4.<<的第一种重载版本

    如果使用一个Time成员函数来重载<<,Time对象将是第一个操作数:trip<<cout;

    但是通过友元函数,可以像下面这样重载运算符

    void operator<<(ostream&os,const Time &t)

    {

           os<<t.hours<<" hours, "<<t.minutes<<" minutes";

     }

     这样就可以使用cout<<trip;

     函数将ostream对象作为一个整体使用,没有直接访问ostream对象的私有成员,所以并不一定是ostream类的友元,这就意味着不必修订ostream的定义。

 

5.<<的第二种重载版本

   cout<<x<<y;

   ostream&operator<<(ostream&os,const Time&t)

   {

          os<<t.hours<<" hours,"<<t.minutes<<" minutes";

          return os;
    }

 

6.对于某些运算符来说,成员函数是唯一合法的选择。在其他情况下。两种格式没有太大区别,有时,根据类设计,使用非成员函数版本可能更好。

 

7.类的自动转换和强制类型转换

相关文章:

  • 2021-09-24
  • 2021-11-11
  • 2021-11-24
  • 2021-08-10
  • 2021-06-18
  • 2021-07-27
  • 2022-02-24
  • 2021-07-09
猜你喜欢
  • 2021-04-12
  • 2021-07-11
  • 2022-01-15
  • 2021-10-07
  • 2022-01-24
  • 2022-01-27
  • 2021-08-18
相关资源
相似解决方案