大学CC++程序设计案例教程张殿龙)c_cpp11课件教学.pptVIP

  • 8
  • 0
  • 约2.28万字
  • 约 128页
  • 2017-03-06 发布于广东
  • 举报

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

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

PPT研究院 POWERPOINT ACADEMY * * 运算符重载为成员函数 【例11.17】运算符重载为成员函数。 // 11-17.cpp #includeiostream.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(xy)?x:y ; } // 函数2 float max( float x,float y){ return (xy)? x:y; } // 函数3 double max(double x,double y){ return (xy)? 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(xy)?x:y; } 较小整数:2 较小实数:1.5 函数模板的写法 int main( ) { int n1=2,n2=10; double d1=1.5,d2=5.6; cout 较小整数:min(n1,n2)endl;

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档