大学CC++程序设计案例教程(张殿龙) c_cpp11.ppt

大学CC++程序设计案例教程(张殿龙) c_cpp11.ppt

  1. 1、本文档共106页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
运算符重载为成员函数 【例11.17】运算符重载为成员函数。 // 11-17.cpp #include<iostream.h> class Complex { public: Complex(double r=0, double i=0):real(r),imag(i){} Complex operator + (Complex); friend ostream & operator << (ostream &, Complex); private: double real; double imag; }; 运算符重载为成员函数 Complex Complex::operator + (Complex c) { return Complex(real + c.real, imag + c.imag); } ostream & operator << (ostream & out, Complex c) { out << "(" << c.real << "+" << c.imag << "i)"; return out; } 运算符重载为成员函数 int main() { Complex c1(2,6),c2(3,4),c3; c3 = c1 + c2; // 相当于 c3 = c1.operator + (c2); cout << c1 << "+" << c2 << "=" << c3 << endl; // 调用operator << (ostream & out, Complex c)函数 return 0; } 运算符重载 运算符重载在C++中是非常有用的,下面几点值得注意: (1)重载运算符与原有的运算符的使用相同,相同的操作数个数、相同的优先级、相同的结合性; (2)有少数运算符不能重载,如“.”、“.*”、“::”、“sizeof”、“?:”; (3)有些运算符不能用友元函数重载,如“=”、“()”、“[]”、 “->”; (4)双目运算符重载为成员函数,则第一个操作数类型应为成员函数所属类的类型; (5)若双目运算符的第一个操作数类型不是自定义类类型,则应使用非成员函数重载该运算符; (6)一般来说,一元运算符、符合赋值运算符(如“+=”、“%=”等)、“=”、“()”、“[]”、“->”等重载为成员函数;其他二元运算符重载为非成员函数。 模板的概念 我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义max()函数需要对不同的数据类型分别定义不同重载(Overload)版本。 // 函数1 int max(int x,int y){ return(x>y)?x:y ; } // 函数2 float max( float x,float y){ return (x>y)? x:y; } // 函数3 double max(double x,double y){ return (x>y)? x:y; } 模板的概念 但如果在主函数中,我们分别定义了 char a,b; 那么在执行max(a,b);时 程序就会出错,因为我们没有定义char类型的重载版本。 现在,我们再重新审视上述的max()函数,它们都具有同样的功能,即求两个数的最大值,能否只写一套代码解决这个问题呢?这样就会避免因重载函数定义不全面而带来的调用错误。为解决上述问题C++引入模板机制,模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。 函数模板的写法 函数模板的一般形式如下: Template <class或者也可以用typename T> 返回类型 函数名(形参表) {//函数定义体 } 说明:template是一个声明模板的关键字,表示声明一个模板关键字class不能省略,如果类型形参多余一个,每个形参前都要加class。 函数模板的写法 【例11.18】函数模板举例。 // 11-18.cpp #include <iostream> using namespace std; /* 声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,T可以被任何字母或者数字代替。*/ template <class T> T min(T x,T y) { return(x<y)?x:y; } 较小整数:2 较小实数:1.5 函数模板的写法 int main( ) { int n1=2,n2=10; double d1=1.5,d2=5.6;

文档评论(0)

时间加速器 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档