清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 第8章多态性和虚函数
第8章 多态性和虚函数
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.1函数重载 先解释一下多态性,一个函数名对应多种状态,即多 种实现,像这样一对多的情况称为多态性。 C++语言多态性表现在以下3个方面。 ①函数重载 ②运算符重载 ③动态联编 函数重载 相同函数对应着若干种不同实现,定义重载函数时要 求在参数的个数或类型或顺序上有所不同,以便选择。 在函数调用时根据参数的不同选择不同的实现。 参见[例8.1]
8. 1 函数重载 先解释一下多态性,一个函数名对应多种状态,即多 种实现,像这样一对多的情况称为多态性。 C++语言多态性表现在以下3个方面。 ① 函数重载 ② 运算符重载 ③ 动态联编 函数重载 相同函数对应着若干种不同实现,定义重载函数时要 求在参数的个数或类型或顺序上有所不同,以便选择。 在函数调用时根据参数的不同选择不同的实现。 参见[例8.1]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 8.2运算符重载 (1)什么是运算符重载 系统对已有的运算符已定义其功能,用户还可以重新定义它 的新功能,这就是运算符重载。运算符重载实际上是函数重 载,因为新功能的定义书写在函数体内。同一个运算符的不 同功能的选取由操作数的类型决定的。 (2)哪些运算符可以重载 除了下列4种运算符外,其余运算符都可以重载。不能重载的 运算符是: k
8. 2 运算符重载 (1) 什么是运算符重载 系统对已有的运算符已定义其功能,用户还可以重新定义它 的新功能,这就是运算符重载。运算符重载实际上是函数重 载,因为新功能的定义书写在函数体内。同一个运算符的不 同功能的选取由操作数的类型决定的。 (2) 哪些运算符可以重载 除了下列4种运算符外,其余运算符都可以重载。不能重载的 运算符是: * , ·* ,∷,?:
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS (3)运算符重载有4个不变 ①优先级不变 ②结合性不变 ③操作数个数不变 ④语法语义不变 (4)运算符重载遵循的原则 ①重载运算符的含义清楚,并且有实际意义 ②重载运算符不能有二义性
(3) 运算符重载有4个不变 ① 优先级不变 ② 结合性不变 ③ 操作数个数不变 ④ 语法语义不变 (4) 运算符重载遵循的原则 ① 重载运算符的含义清楚,并且有实际意义 ② 重载运算符不能有二义性
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS (5)运算符重载的两种形式 考虑到运算符重载后能够对类中的所有成员(包含私有成员) 都能进行操作,因此运算符重载的形式有两种:一是成员 函数形式,二是友元函数形式 ①重载为类的成员函数 具体格式如下: 〈类型〉 operator〈运算符〉((参数表〉) 参见[例8.2]
(5) 运算符重载的两种形式 考虑到运算符重载后能够对类中的所有成员(包含私有成员) 都能进行操作,因此运算符重载的形式有两种:一是成员 函数形式,二是友元函数形式。 ① 重载为类的成员函数 具体格式如下: 〈类型〉operator〈运算符〉(〈参数表〉) 参见[例8. 2]