8章多态性 H 和静态联编相对应,如果联编工作在程序运行阶段 完成,则称为动态联编。在编译、连接过程中无法解决 的联编问题,要等到程序开始运行之后再来确定。例如, 本章将要介绍的虚函数就是通过动态联编完成的 函数重载在函数及类的章节中曾做过详细的讨论, 所以在本章中,静态多态性主要介绍运算符重载;对于 动态多态性,将对虚函数作详细介绍。 BACK
第8章 多态性 和静态联编相对应,如果联编工作在程序运行阶段 完成,则称为动态联编。在编译、连接过程中无法解决 的联编问题,要等到程序开始运行之后再来确定。例如, 本章将要介绍的虚函数就是通过动态联编完成的。 函数重载在函数及类的章节中曾做过详细的讨论, 所以在本章中,静态多态性主要介绍运算符重载;对于 动态多态性,将对虚函数作详细介绍
8章多态性 H 8.2运算符重载 C艹中预定义的运算符的操作对象只能是基本数据 类型。实际上,对于很多用户自定义的类型(如类),也 需要有类似的运算操作。例如,下面的程序声明了一个 点类 point classpoint / point类声明 private intx
第8章 多态性 8.2 运算符重载 C++中预定义的运算符的操作对象只能是基本数据 类型。实际上,对于很多用户自定义的类型(如类),也 需要有类似的运算操作。例如,下面的程序声明了一个 点类point。 classpoint //point类声明 { private: intx,y;
8章多态性 H public ∥构造函数 point(intxx-=0, intyy-=OxXX; y=yy intet XO ∥示x值 intet yo 显示y值
第8章 多态性 public: //构造函数 point(intxx=0,intyy=0){x=xx;y=yy;} intget_x(); //显示x值 intget_y(); //显示y值 //... };
8章多态性 H 于是我们可以这样声明点类的对象: pointpl(l, 1),p2(3, 3) 如果我们需要对pl和p2进行加法运算,该如何实 现呢?我们当然希望能使用“+〃运算符,写出表达式 “pl+p2〃,但是编译的时候却会出错,因为编译器不 知道该如何完成这个加法。这时候,我们就需要自己 编写程序来说明“+″在作用于 point类对象时,该实现 什么样的功能,这就是运算符重载。运算符重载是对 已有的运算符赋予多重含义,使同一个运算符作用于 不同类型的数据时,导致不同类型的行为
第8章 多态性 于是我们可以这样声明点类的对象: pointp1(1,1),p2(3,3) 如果我们需要对p1和p2进行加法运算,该如何实 现呢?我们当然希望能使用“+”运算符,写出表达式 “ p1+p2” ,但是编译的时候却会出错,因为编译器不 知道该如何完成这个加法。这时候,我们就需要自己 编写程序来说明“+”在作用于point类对象时,该实现 什么样的功能,这就是运算符重载。运算符重载是对 已有的运算符赋予多重含义,使同一个运算符作用于 不同类型的数据时,导致不同类型的行为
8章多态性 H 在运算符重载的实现过程中,首先把指定的运算表达 式转化为对运算符函数的调用,运算对象转化为运算 符函数的实参,然后,根据实参的类型来确定需要调 用的函数。这个过程是在编译过程中完成的
第8章 多态性 在运算符重载的实现过程中,首先把指定的运算表达 式转化为对运算符函数的调用,运算对象转化为运算 符函数的实参,然后,根据实参的类型来确定需要调 用的函数。这个过程是在编译过程中完成的