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

posted @ 2012-09-14 00:48  haiyupeter  阅读(312)  评论(0编辑  收藏  举报