• 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.禁止转换的二义性(特别小心)

  • 相关阅读:
    UI: 操作导航控制器的视图控制器数组
    UI: 使用 UIViewController 展现和管理视图
    UI: 使用 UINavigationController 实现导航
    UI: 使用 UIActivityViewController 显示分享选项
    UI: 使用 UIActivityViewController 显示分享选项
    UI: 自定义 UISegmentedControl
    UI: UISegmentedControl 做简单选项分组及其自定义
    UI: UISlider 实现指定范围值的选择
    隧道目标识别实验过程(二)标准VOC数据集和制作后的数据集实验结果对比
    隧道目标识别实验过程(一)数据集的制作
  • 原文地址:https://www.cnblogs.com/haiyupeter/p/2684203.html
Copyright © 2020-2023  润新知