- 1
- 0
- 约2.53万字
- 约 17页
- 2016-05-07 发布于重庆
- 举报
cppchap5第五章算符重载与入出流操作
算符重载与入/出流操作
/downloads67/ebook/241634/cppchap5.doc
在前一章的例27中,当实现复型数c=a+b的运算时是利用类的成员函数进行的。在实用中所期望的是直接利用上式的运算表达式而求解。本章将讨论的算符重载便是解决此类需求的一种技术手段。另一方面本章还将讲述在C++语言中如何使用标准流入/出(cin 和cout)算符并配以格式说明的方法。所有这些也都是C++语言利用它特有的流式类的基本手段为用户提供的便捷的入/出手段。
§1 C++语言的运算符重载(Operator Overloading)
其实算符重载并非在C++语言中才有,C中的“(”号就是一种重载算符。比如:
int i = 20,(p;
p = i;
i = (p (2 ;
等表达式中的星号随其位置的不同而引起的操作也不同,这也可以被认为是一种重载。
§1.1 C++语言类中的算符重载
第三章已经讨论了C++语言函数的重载的概念。在C++语言中,大多数的运算符号也可以当作函数名的一部分来使用,这就奠定了算符重载的基础。声明算符重载的格式是:
operator C++语言支持的算符(参数描述表) {…}
将前一章最后例27中的类成员函数add(…)和sub(…)分别改写为算符函数后可呈例1的形式:
例1:
# include ( stdio.h (
class Complex
{
double r, i ;
public:
Complex (double rs = 0.,double is=0.) {r = rs ; i = is;};
Complex operator+(const Complex add_2){return Complex(r+add_2.r, i + add_2.i);}
Complex operator((const Complex sub_2){return Complex(r(sub_2.r, i ( sub_2.i);}
void operator!();
};
void Complex::operator!()
{
if (i(=0) printf (“% .2f + % .2fi\n”,r,i);
else printf(“% .2f % .2fi\n”,r,i);
}
void main()
{
Complex a(3.,9.),b(7.,8.),c(0.,0.);
c=a.operator+(b);//当执行完此表达式后将执行析构函数
printf(“a+b =”); !c;
c=b.operator((a);
printf (“b(a=”); !c;
}
本例分别作了一元算符‘!’和二元算符‘+’、‘-’的函数重载。例中一元算符‘!’已按它原有的形式(也必须用原有的形式)写在操作对象左面。而二元算符都有意按“operator +”做为函数名写在其对象和参量之间。在对算符函数引用时,C++语言规定作为声明重载算符前的关键字“.operator”可以被省略,其后的“()”也可以被省略。括号内的参数则可直接写在算符之后。这样上例main()函数内的两个引用就可以分别改写成非常简单、熟悉的形式了:
c=a+b ;
c=b(a ;
可见算符重载使程序的书写大为简化了。上例的运算甚至可以连算,例如写出:“c=a+b+a ;”的形式来,若仍用例中函数的写法,此句将十分冗长且不易读懂。使用算符重载和原算符的关系式时必须注意以下几点:
①算符的分类与算符的限制
须再强调,算符重载是重复利用C++语言的原有算符,并非取消相应算符的原有功能(以运算对象类型区分其功能)。为避免发生二义性,算符重载并不是对全部C++语言所支持的所有算符都通用。下面几种算符就不允许重载:“sizeof、.、(、::、?、((”。而“=、((、((、((”四种算符只能作为类中的成员函数才能被重载。此外不能利用算符重载创造新算符。
②重载后的算符语义不能发生本质的改变
由上例可见,算符重载普遍适用于一、二元算符,而且被重载的算符仍保留原有的特性以及原有的优先顺序(如先乘除后加减,先右后左等)。如在引用算符重载函数的省略形式时,“!”必须出现在被操作对象的左侧;参数应将移至“((”内等。
例2:
# include ( iostream . h (
# include ( string . h (
class Student
{
char name[10];
float score[3];
static unsigned int sum ;
您可能关注的文档
最近下载
- 大数据技术融合人力资源管理.docx VIP
- 2026年中国大型广告牌行业市场数据调查、监测研究报告.docx
- 2025年江苏省建筑施工企业主要负责人安全员A证考核考试题库附答案.docx
- 新编语文课程与教学论讲义.docx VIP
- 苏科版数学八年级下册期中测试试卷-含答案02.pdf VIP
- 03-【传统村落保护规划】宁波韩岭古村总体改造方案-DC国际-366页.pdf VIP
- 汽车调光玻璃行业市场前景及投资研究报告:天幕玻璃,国产厂商突破瓶颈,价格下探.pdf VIP
- 金融大数据与人工智能的融合趋势.docx VIP
- 上肢康复训练系统技术参数.docx VIP
- 五年级下册每日计算.pdf VIP
原创力文档

文档评论(0)