• 操作符重载


    重载操作符的定义:

      一、  不可重载的操作符:::  .*   .  ?.;必须重载为成员函数的操作符:(),[],->,->;

      二、  重载操作符必须具有一个类类型的操作数;

            1、内置类型的操作符,含义不能改变;

            2、不能为任何内置类型定义新的操作符;

      三、  优先级和结合性是固定的;

      四、  作为类成员的重载函数,其形参看起来比操作数少一,因为含有一个this指针;

      

    重载输出《《:

      一般定义:

       

    1 ostream& operaotr<<(ostream& os,const classtype& object)
    2         {
    3             os<<。。。。。
    4         return os;
    5         }

    输出操作符所做的格式化应尽量少;

    IO操作符必须为非成员函数,一般为友元函数;

    重载输入》》:

    eg:

    1 //Sale calss
    2 istream& operator>>(istream& in,Sale& s){
    3     double price;
    4     in>>s.isbn>>s.units_sold>>price;
    5        if(in)
    6             s.revenue=s.units_sold*price;
    7         else
    8             s=Sale();  //input fail:reset object to default state;
    9 }

    设计输入操作符时,如果可能,要确定错误恢复措施;以确保对象处于一致和可用状态;

    定义算术操作符:既定义了算数操作符又定义了复合操作符的类,一般应使用复合操作符,这样避免创建和撤销一个临时变量。

    定义相等操作符:

        bool operator==(const type&a,const type&2);//declare;

        1、操作符的两个对象必须是相同类型;

        2、定义了==,也应定义!=;

    重载下标操作符:

    重载下标操作符 [] 是很常见的事情,它保存类中元素的顺序。vector 和 string 就是这样的类。在重载操作符[]时,一定要记住定义它的两个版本:非常量版本和常量版本:

    class MyString
    {
    private:
      char * buff;
      int size;
    public:
       //...
      char& operator [] (int index) { return buff[index]; } // 非常量版本
      const char& operator [] (int index) const { return buff[index]; } // 常量版本  第一个const 返回值,第二个是函数不改变数据成员
    };

    当对象本身是常量时,下标操作符的常量版本被调用。

    void f(const MyString& str)
    {
      char c = str[0]; // 调用const char& operator [] (int index) const

    }

    感觉应该有范围检查;

  • 相关阅读:
    SVN——Jenkins自动发布
    IIS之虚拟目录学习
    SVN迁移
    通过配置host,自定义域名让本地访问
    比较两个时间的大小 举例:CompareDate("12:00","11:15")
    [转]SQL Server 批量完整备份
    js前台编码,asp.net后台解码 防止前台传值到后台为乱码
    前端将图片二进制流显示在html端
    【转】解析<button>和<input type="button"> 的区别
    利用bat批处理——实现数据库的自动备份和删除
  • 原文地址:https://www.cnblogs.com/wxhzt/p/3049985.html
Copyright © 2020-2023  润新知