zoukankan      html  css  js  c++  java
  • C++重载操作符与转换

    重载操作符

    重载操作符的定义

    重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符符号。

    如:Sales_item operator+(const Sales_item& ,  const Sales_item&);

    class Sales_item{

    public:

      Sales_item operator+(const Sales_item & s1, const Sales_item s2) {

        Sales_item item;

        item.age = s1.age + s2.age;

        return item;

      }

    private:

    }

    重载操作符设计原则

    1.不要重载具有内置含义的操作符(&, &&, ||等)

    2.大多数操作对类对象没有意义(类对象中可以直接用方法搞定)

    3.复合赋值操作符(逻辑上有+,则应该也定义+=)

    4.相关关系操作符(逻辑上定义 < 于,则应该定义全部>, >=, <, <=)

    5.选择成员或非成员实现(赋值=, 下标[], 调用(), 和成员访问箭头->等操作必需定义为成员......)

    输入输出操作符

    定义全局的<<输出操作符

    ostream& operator<<(ostream &out, const Sales_item& s) {

      out << s.isbn << "\t" << s.avg_price();

      return out;

    }

    IO输入输出操作符为非成员函数,若想上述方法为Sales_item工作,则上述方法应设置为友元ostream能访问的方法friend std::istream &operator << .....

    算术操作符和关系操作符

    +, -, *, /, %

    赋值操作符

    =, +=

    必需返回对*this的引用

    下标操作符

    []

    int &operator[] (const sizt);

    成员访问操作符

    *, ->

    const Screen &operator*() const { return *ptr->sp; }

    const Screen *operator->() const { return ptr->sp; }

    自增自减操作符

    ++, -- 

    前自增/前自减:CheckedPtr& CheckedPtr::operator++(); // 返回的是引用

    后自增/后自减:CheckedPtr CheckedPtr::operator++(int); // 后缀式添加int形参数,返回的是当前对象的副本

    转换

    转换的作用

    1.支持混合表达式

    int operator+(int, const SmallInt &);

    int operator+(const SmallInt&, int);

    SmallInt operator+(const SmallInt&, const SmallInt&);

    2.转换减少所需操作符的数目

    转换的定义

    operator type();

    如:

    class SmallInt{

    public:

      operator int() const{ return val; }

    }

    转换不允许为数组或者函数类型

    特点:

    1.只能应用一个类类型转换

    2.类类型转换和标准转换按需分先后执行

    3.选择最佳匹配进行转换

    4.禁止转换的二义性(特别小心)

  • 相关阅读:
    Windows Azure Cloud Service (6) Reboot and Reimage
    Windows Azure Platform Introduction (7) Windows Azure Host OS 和 Guest OS
    Nod32的内网升级方案
    32位色
    ASP.NET 2.0 的内部变化
    关于Nod的离线升级方案
    光、色、补色
    解决迅雷的“重复任务提示”
    Nod32Viewer不能取得最新的镜像包的问题
    火车头实在是太好玩了
  • 原文地址:https://www.cnblogs.com/haiyupeter/p/2684203.html
Copyright © 2011-2022 走看看