您的位置:首页 > 编程语言 > C语言/C++

再次学习c++运算符重载(一)

2008-09-11 09:00 288 查看
对于运算符重载总的来说有3点需要注意
1. c++不允许创造新的运算符
2.不可重载的运算符有: . .* :: ?:。(?:是三元运算符)
3.类成员函数和全局函数的运算符重载的比较

个人认为第三点最为重要,下面就开始着重研究类成员函数和全局函数的运算符重载
1.必须作为成元函数进行重载的运算符
如果要重载(),[],->或者任何赋值运算符, 运算符重载必须声明为类的成员函数。
2.流插入运算符和流提取运算符一定要作为全局函数重载
因为<<或>>左边的操作数的类型是ostream&或istream&,而右边是用户自定义类的对象,则要用全局函数重载。
3.全局函数重载与有元函数重载
如果要调用类中的private数据,或者出于性能方面的考虑则要用有元函数重载。>>或<<最好要用友元函数重载。
4.可交换的运算符
例如+运算符,这里要求加法运算有交换性。如果加法运算符作为成员函数或有元函数重载,则类的对象必须只能够出现在一边。所以最好用全局函数重载。

例一: 重载输入输出
//PhoneNumber.h
#ifndef PHNOENUMBER_H
#define PHONENUMBER_H

#include<iostream>
#include<string>
using namespace std;

class PhoneNumber
{
//以友元函数重载<<和>>
friend ostream &operator<<( ostream &, const PhoneNumber &);
friend istream &operator>>( istream &, PhoneNumber &);
private:
string areaCode;
string exchange;
string line;
};

#endif
//PhoneNumber.cpp
#include "PhoneNumber.h"

ostream &operator<<(ostream &output, const PhoneNumber &number)
{
output<<"("<<number.areaCode<<")"<<number.exchange<<"-"<<number.line<<endl;
return output;
}
istream &operator>>(istream &input, PhoneNumber &number)
{
input>>number.areaCode>>number.exchange>>number.line;
return input;
}
//run.cpp
#include "PhoneNumber.h"
void main()
{
PhoneNumber number;
cin>>number;
cout<<number;
}
以上的例子,并没有修改c++的标准输入输出类库,就能把全新的用户自定义类型的输入输出特性添加到c++中。这是c++编程语言可扩展性的又一个例证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: