zoukankan      html  css  js  c++  java
  • 操作符重载

    重载操作符的定义:

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

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

            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

    }

    感觉应该有范围检查;

  • 相关阅读:
    Auto.js常用控件整理
    python对接口sign签名操作
    # 859.亲密字符串
    linux系统如何挂载FTP共享文件
    解决“Tomcat控制台输出乱码问题”
    关于“Unknown or unsupported command 'install'”问题解决的小结
    输出九九乘法表
    python webdriver混合驱动测试框架(数据驱动+关键字驱动)
    python webdriver关键字框架
    python webdriver测试框架--数据驱动DB驱动
  • 原文地址:https://www.cnblogs.com/wxhzt/p/3049985.html
Copyright © 2011-2022 走看看