C++语言程序设计 第八章多态性
1 第八章 多态性 C++语言程序设计
C++语言程序设计 本拿主要内容 ●多态性 ·运算符重载 。虚函数 ●纯虚函数 。抽象类 ·深度探索 *米 a 米
C++语言程序设计 2 本章主要内容 多态性 运算符重载 虚函数 纯虚函数 抽象类 深度探索
C++语言程序设计 多态性的概念 多 态 ● 多态性是面向对象程序设计的重要特 性 征之一。 概 ● 多态性是指发出同样的消息被不同类 述 型的对象接收时有可能导致完全不同 的行为。 -消息:对类的成员函数的调用 不同的行为不阿的实现,即调用了柔半 同的函数
C++语言程序设计 多态性的概念 多态性是面向对象程序设计的重要特 征之一。 多态性是指发出同样的消息被不同类 型的对象接收时有可能导致完全不同 的行为。 – 消息:对类的成员函数的调用 – 不同的行为:不同的实现,即调用了不 同的函数 3 多态性概述
C++语言程序设计 多态的类型 多 态 强制多态:数据类型转换(隐式或显 性 概 式) 述 ●重载多态:函数重载,运算符重载 ●包含多态:虚函数 ·类型参数化多态:函数模板, 类模板举
C++语言程序设计 多态的类型 强制多态:数据类型转换(隐式或显 式) 重载多态:函数重载,运算符重载 包含多态:虚函数 类型参数化多态:函数模板,类模板 4 多态性概述
C++语言程序设计 多态的实现 态 ·绑定:确定同名操作的具体操作对象的 性 过程 概 述 ●编译时多态:静态绑定 强制、重载和参数多态 ·运行时多态:动态绑定 一包含多态
C++语言程序设计 多态的实现 绑定:确定同名操作的具体操作对象的 过程 编译时多态:静态绑定 – 强制、重载和参数多态 运行时多态:动态绑定 – 包含多态 5 多态性概述
C++语言程序设计 问题举例一 复数的运算 运 算class Complex{/复数类声明 符 public: 重 Complex(double r 0.0,double i 0.0){ real r;imag=i; 载 void display()const; /显示复数的值 private: double real; double imag; };
C++语言程序设计 6 问题举例——复数的运算 class Complex { //复数类声明 public: Complex(double r = 0.0,double i = 0.0) { real = r; imag=i; } void display() const; //显示复数的值 private: double real; double imag; }; 运算符重载
C++语言程序设计 问题举例 复数的运算 远 算 ●用“+”、“”能够实现复数的加减运 符 算吗? 重 载 ●3 实现复数加减运算的方法 一重载“+”、“”运算符
C++语言程序设计 7 问题举例——复数的运算 用“+”、“-”能够实现复数的加减运 算吗? 实现复数加减运算的方法 ——重载“+”、“-”运算符 运算符重载
C++语言程序设计 运算符重载的实质 运 算 ·运算符重载是对已有的运算符赋予多重含义 符 。必要性 重 一C++中预定义的运算符其运算对象只能是基本数 据类型,而不适用于用户自定义类型(如类) 载 。实现机制 一将指定的运算表达式转化为对运算符函数的调 用,运算对象转化为运算符函数的实参 编译系统对重载运算符的选择,遵循函数重载 的选择原则
C++语言程序设计 8 运算符重载的实质 运算符重载是对已有的运算符赋予多重含义 必要性 – C++中预定义的运算符其运算对象只能是基本数 据类型,而不适用于用户自定义类型(如类) 实现机制 – 将指定的运算表达式转化为对运算符函数的调 用,运算对象转化为运算符函数的实参。 – 编译系统对重载运算符的选择,遵循函数重载 的选择原则。 运算符重载
C++语言程序设计 规则和限制 运 算 ● C+不允许重载下列四个运算符: .*:?: 符 重 ●只能重载C++语言中已有的运算符, 不可臆造新的。 载 ·不改变原运算符的优先级和结合性。 ●不能改变操作数个数。 ● 经重载的运算符,其操作数中至少应 该有一个是自定义类型
C++语言程序设计 9 运算符重载 规则和限制 C++不允许重载下列四个运算符: . .* :: ?: 只能重载C++语言中已有的运算符, 不可臆造新的。 不改变原运算符的优先级和结合性。 不能改变操作数个数。 经重载的运算符,其操作数中至少应 该有一个是自定义类型
C++语言程序设计 两种形式 运 算 符 。重载为类的非静态成员函数 重 重载为非成员函数 载 米
C++语言程序设计 10 两种形式 重载为类的非静态成员函数 重载为非成员函数 运算符重载