- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章_重载及模板
第7章 重载与模板 本章要点 7.1 重载 7.2 模板 7.1 重载 重载 所谓重载,就是重新赋予新的含义。具体的说就是方法名相同,参数个数或类型不同。 C++中重载的类型 函数重载 运算符重载 函数重载概念 函数重载 是指用同一个函数名对应着多个函数实现的情况。 例如:从2个数中找出其中的较大者。 该2个数可以是整型、实型、字符型 int max1(int a,int b); double max2(double a,double b); char max3(char a,char b); 函数重载举例 函数重载 函数名相同,参数类型、参数个数或返回值不同,编译器自动实现对应函数的调用,这就叫函数重载。 函数重载举例 例如, 函数重载说明 (1)作为重载函数至少在参数个数、参数类型上有所不同。若仅在返回类型上不同,编译器是无法区别的。 如:void func(int); int func(int); //错误 int min(int ,int); int min(int,int,int); //正确 int add(int,int); double add(double,double); //正确 (2)typedef定义的类型只是给已有类型取另外一个名字,编译器不能将其同原类型区分。如: typedef INT int; // 指定用标识符int 代表INT类型 void func(int x) {...} void func (INT x) {…} //重复声明,func函数有相同的参数表 (3)重载函数一般应具有相同的功能,否则会破坏程序的可读性 运算符重载概念 引例 用“+”运算符完成两个实数、两个复数、两个字符串的运算。 实数 设有两个实数:c1=10,c2=20,则两个实数相加的结果是:c1+c2=10+20=30。 复数 设有两个复数:c1=10+10i,c2=20+20i,则两个复数相加的结果是:c1+c2=30+30i。 字符串 设有两个字符串:c1=“ABCD”,c2=“EFGH”则两个字符串相加的结果是: c1 +c2 =“ABCDEFGH”。 分别用“+”运算符完成两个实数、复数相加,两个字符串的连接运算,得到完全不同的结果,就是“+”运算符的重载 运算符重载的方法 运算符重载是对已有的运算符赋予多重含义。 运算符重载有2种形式 成员函数形式 友元函数形式 运算符重载的方法 是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。 运算符重载的方法 每个运算符实际上是一个函数。 例如,对于运算符“+”之所以既能实现实数相加,又能实现虚数相加,还能实现字符串连接,就是预先定义了一系列重载函数: double operator +(double,double); //两个实数运算 char operator +(char,char); ); //两个字符串运算 Complex operator + (Complex c); ); //两个复数运算 运算符重载的注意事项 不能重载的运算符有5个: 域运算符(::) 条件运算符(?:) 直接成员访问运算符(.) 长度运算符sizeof 解除对指向类成员的指针的引用运算符(.*)。 重载规则: 重载的运算符要保持原运算符的意义 只能对已有的运算符重载,不能增加新的运算符 重载的运算符不会改变原先的优先级和结合性 =、( )、[ ]、-、new、delete只允许用成员函数重载 运算符重载的定义形式 运算符函数是一种特殊的成员函数或友元函数。 (1) 成员函数重载运算符的一般形式: 返回类型类名::operator重载运算符 (参数表) { 函数体 } (2)友元函数重载运算符的一般形式: friend返回类型operator重载运算符(参数表) { 函数体 } 成员函数运算符重载 重载运算符函数作为类的成员函数使用时,由于它的数据有一个来自对象本身,运算符重载函数的参数数量应比正常运算符少一参数。 成员运算符函数定义: 成员运算符函数在类中的声明格式: 在类外定义重载运算符成员的形式: #include iostream using namespace std; class Complex { private: double real; double image; public:
文档评论(0)