第八章 多态性
第八章 多 态 性
第八章多态性 §8.1多态性的基本概念 §8.2函数重载 §8.3搂贝构造函数 §8.4运算符重载 §8.5虚函数 §8.6纯虚函数与抽象类
第八章 多态性 §8.1 多态性的基本概念 §8.2 函数重载 §8.3 拷贝构造函数 §8.4 运算符重载 §8.5 虚函数 §8.6 纯虚函数与抽象类
§8.1多态性的基本概念 ◆在基类中定义的属性或操作被派生类继承之后,可以 具有不同的数据类型或表现出不同的行为,从而同 个属性或操作名称在各个派生类中具有不同的含义 anager Secretary Wife Assistant
§8.1 多态性的基本概念 在基类中定义的属性或操作被派生类继承之后,可以 具有不同的数据类型或表现出不同的行为,从而同一 个属性或操作名称在各个派生类中具有不同的含义 Manager Secretary Wife Assistant
§8.1多态性的基本概念 C++语言支持两种多态性 ◆编译时的多态性 通过重载实现(函数重载,运算符重载) 多人,运行时的多态性 通过虚函数实现(借助抽象类和动态绑定)
§8.1 多态性的基本概念 C++语言支持两种多态性 编译时的多态性 通过重载实现(函数重载,运算符重载) 运行时的多态性 通过虚函数实现(借助抽象类和动态绑定)
§8.1多态性的基本概念 ◆绑定 将一个函数调用链接上相应的函数体代码 的过程 ·静态绑定 在编译时就能够确定调用哪一个函数 ◆动态绑定 在运行时才能够确定调用哪一个函数
§8.1 多态性的基本概念 绑定 将一个函数调用链接上相应的函数体代码 的过程 静态绑定 在编译时就能够确定调用哪一个函数 动态绑定 在运行时才能够确定调用哪一个函数
§8.1多态性的基本概念 ◆本章重点 重载:函数重载,运算符重载静态绑定 虚函数:抽象类 动态绑定
§8.1 多态性的基本概念 本章重点 重载:函数重载,运算符重载 静态绑定 虚函数:抽象类 动态绑定
§8.2函数重载 ◆函数重载(函数名相同,函数参数不同) void print(char) void print(int, int) void print(float) void print(char ) ◆函数调用 print( Hello, overload! print(3, 5)
§8.2 函数重载 函数重载(函数名相同,函数参数不同) – void print(char); – void print(int, int); – void print(float); – void print(char *); –…… 函数调用 – print(“Hello,overload!”); – print(3, 5);
§8.2函数重载 ◆类构造函数的重载 class A public A(); a(int) A(char c); Aa(34)
§8.2 函数重载 类构造函数的重载 class A { public: A( ); A(int); A(char c); //…… }; A aa(34);
§8.2函数重载 函数重载的注意事项 (1)参数不同,是指参数的个数,参数的类型不同 (2)只有返回值类型不同,不是函数重载 (3)不要用重载函数描述毫不相干的函数 (4)在重载函数中使用缺省参数时应注意二义性问题
§8.2 函数重载 函数重载的注意事项 ⑴ 参数不同,是指参数的个数,参数的类型不同 ⑵ 只有返回值类型不同,不是函数重载 ⑶ 不要用重载函数描述毫不相干的函数 ⑷ 在重载函数中使用缺省参数时应注意二义性问题
§8.2函数重载 t] void print(int a, int b) void print(int a, int b, int c) 函数说明: void print(inta,intb,intc=50) 函数调用: print(10,100);/eror!系统不知调用哪个函数
§8.2 函数重载 例: void print(int a, int b) { …… } void print(int a, int b, int c) { …… } 函数说明:void print(int a, int b, int c=50); 函数调用:print(10, 100); //error! 系统不知调用哪个函数