- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象的程序设计:六、重载
本章主要内容 函数重载 运算符重载 函数重载 多个函数具有相同的名字,体现了面向对象程序设计的多态性。 在C++中, 一个函数不仅由其名字标识,而且由其参数的数目,次序和类型来决定。 函数重载 在函数重载中,不同的函数具有相同的名字,而函数中的参数在至少下列方面之一存在不同: 数目 类型 次序 例子 void swap (unsigned long , unsigned long ) void swap (double , double ) void swap (char , char ) void swap (Point , Point ) 它们是不同的函数!!! 不好的例子 class Student{ public: unsigned credits();//Get the credits unsigned credits(unsigned n); //Set the credits with n } 具有相同名字的函数必须具有类似的功能 但是,如果参数个数和类型都相同,仅仅返回值不同的重载函数是非法的。 函数重载 以下三类函数都可以被重载,虽然它们在程序中所起的作用不同,但重载的规则完全相同 类以外的一般函数 构造函数 类的成员函数 构造函数重载 #include iostream.h class Point { public: Point( int xx = 0, int yy = 0 ) { x= xx; y = yy; cout Point constructor.endl; }; private: int x,y; }; 构造函数重载 class Figure { public: Figure(){cout Default constructor.endl;}; Figure( const Point center ){cout 2nd constructor.endl;}; Figure( const Point vertices[], int count ){cout 3rd constructor.endl;}; }; 构造函数重载 int main() { Figure fig1[3]; Point center( 25, 50 ); Figure fig2( center ); const int VCount = 5; Point verts[VCount]; Figure fig3( verts, VCount ); return 0; } 变量转换 void calculate (long p1, long p2, double p3, double p4); long a1 = int a2 = 1; double a3 = 2 float a4 = 3.1; calculate(a1, a2, a3, a4); //Correct!!! //Conversion! Student S; calculate(S, 10, 5.5, 6); // Incompatible!! 重载方法 最佳匹配函数原则: 依据每一个变量的匹配型,编译器将找到最匹配的一个函数 如果多于一个函数匹配型一样,那么就将产生一个错误 例子 void display (int x); //version1 void display (float y); //version2 int i; float f; double d; display(i); //version1 display(f); //version2 display(d); // I do not know which one !!! 运算符重载 将标准的运算符,如 +, , = … 在特定类对象进行运算时,赋予新的含义. 运算符实际上是一个函数,所以运算符重载实际上是函数的重载。 使用与标准的运算符相同的名字,可以使我们的程序可读性增强 允许被重载的运算符 单目运算符 new, delete, new[], delete[], ++, --, (), [], +, -, *, , !, ~, 双目运算符 +, -, *, /, %, =, +=, -=, *=, /=, %=, , |, ^, ^=, =, |=, ==, !=, , , =, =, ||, , , , =, =, -, -* 不允许被重载的运算符 . 成员访问 * 取指针的内容 :: 作用域操作符 ?: 算术假设判断 运算符重载的原则 用户
文档评论(0)