设为首页 加入收藏

TOP

C++运算符重载(二)
2015-11-21 01:04:51 来源: 作者: 【 】 浏览:5
Tags:运算 重载
nt 转换运算符?
private:
? ? int m_value;
? ??
friend Integer operator+(int value, Integer integer); ??
};
?
//Integer operator +(Integer integer, int value); ?//不能声明该函数,否则会和成员函数冲突?
Integer operator+(int value, Integer integer);
?
//integer.cpp
#include "integer.h"
?
#include
#include
Integer::Integer() {
? ? m_value = 0;
}
Integer::Integer(int value) {
? ? m_value = value;
}
?
Integer Integer::operator+(int value) {
? ? int tmpValue = m_value + value;
? ? return Integer(tmpValue);
}
?
void Integer::operator=(int value) {
? ? ?m_value = value;
}
Integer::operator int() const {
? ? return m_value;
}
?
Integer operator+(int value, Integer integer) {
? ? int tmpValue = integer.m_value + value;
? ? return Integer(tmpValue);
}
?
使用示例:
?
?
?
Integer integer = Integer(10); ?
Integer tmpInteger = 100; ? //重载=运算符
tmpInteger = integer + 1; ? //重载Integer成员函数+运算符
tmpInteger = 1 + tmpInteger;//重载友元函数+运算符
int num = tmpInteger; ? ? ? //重载int 转换运算符
?
?
?重载++运算符:
?
? 前缀各后缀运算两种,为了区分这两种运算,将后缀运算符视为双目运算符,示例代码如下:
?
?
?
?
//integer.h
class Integer {
public:
? ? Integer();
? ? Integer(int value);
? ? Integer operator+(int value);
? ? void operator=(int value);
? ? operator int() const; //int 转换运算符?
? ? Integer operator++(); //重载 ++Integer?
? ? Integer operator++(int value);//重载 Integer++?
private:
? ? int m_value;
? ??
friend Integer operator+(int value, Integer integer); ??
};
?
//Integer operator +(Integer integer, int value); ?//不能声明该函数,否则会和成员函数冲突?
Integer operator+(int value, Integer integer);
?
//integer.cpp
#include "integer.h"
?
Integer::Integer() {
? ? m_value = 0;
}
Integer::Integer(int value) {
? ? m_value = value;
}
?
Integer Integer::operator+(int value) {
? ? int tmpValue = m_value + value;
? ? return Integer(tmpValue);
}
?
void Integer::operator=(int value) {
? ? ?m_value = value;
}
Integer::operator int() const {
? ? return m_value;
}
?
Integer Integer::operator++() {
? ? Integer tmpInteger;
? ? tmpInteger = ++m_value;
? ? return tmpInteger;
}
Integer Integer::operator++(int value) {
? ? Integer tmpInteger;
? ? tmpInteger = m_value++;
? ? return tmpInteger;
}
? ??
Integer operator+(int value, Integer integer) {
? ? int tmpValue = integer.m_value + value;
? ? return Integer(tmpValue);
}
?
使用示例:
?
?
?
?
? ? Integer integer = Integer(10); ?
? ? Integer tmpInteger = 100; ? //重载=运算符
? ? tmpInteger = integer + 1; ? //重载Integer成员函数+运算符
? ? tmpInteger = 1 + tmpInteger;//重载友元函数+运算符
? ? int num = tmpInteger; ? ? ? //重载int 转换运算符
? ? tmpInteger = integer++; ? ? //重载 Integer++?
? ? tmpInteger = ++integer; ? ? //重载 ++Integer
?
?
?
两种重载形式的比较:
在多数情况下,将运算符重载为类的成员函数和类的友元函数都是可以的。但成员函数运算符与友元函数运算符也具有各自的一些特点:
(1) 一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。
(2) 以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。
(3) 类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
(4) 若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。
(5) 若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。
(6) 当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用)。如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。
(7) 当需要重载运算符具有可交换性时,选择重载为友元函数。
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[c++]派生类的构造和析构 下一篇POJ 2823 Sliding Window (单调..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: