第4章重载与模板
1 第4章 重载与模板
第4章重载与模板 22函数名重载 函数模板 类模板
2 第4章 重载与模板 函数名重载 函数模板 类模板
函数名重载 函数名重载与静态绑定 」对象赋值与赋值运算符重载 类型转换与转换函数 々插入/提取符及其重载 2运算符重载规则
3 函数名重载 函数名重载与静态绑定 对象赋值与赋值运算符重载 类型转换与转换函数 插入/提取符及其重载 运算符重载规则
函数名重载与静态绑定 函数名重载 运算符重载 运算符重载的成员函数方式和友元函数方 式
4 函数名重载与静态绑定 函数名重载 运算符重载 运算符重载的成员函数方式和友元函数方 式
函数名重载与静态绑定 绑定( binding)又称联编、聚束,是指程 序在编译或运行时将一个标识解释为一个 这里讲的绑定,主要指程序在编译或运行 相应的程序实体 时将一个函数名解释为一个相应的函数体 前面介绍的函数都是一个函数名对应一个 函数体。C+也允许一个函数名对应多个 函数体,形成函数名的多态性。这种多态 性可以简单地概括为“一个接口,多种方 法
5 函数名重载与静态绑定 绑定(binding)又称联编、聚束,是指程 序在编译或运行时将一个标识解释为一个 相应的程序实体 这里讲的绑定,主要指程序在编译或运行 时将一个函数名解释为一个相应的函数体 前面介绍的函数都是一个函数名对应一个 函数体。C++也允许一个函数名对应多个 函数体,形成函数名的多态性。这种多态 性可以简单地概括为“一个接口,多种方 法
函数名重载 函数名重载就是多个函数使用一个函数名 2先看下面的例子。 例411对任意两个数据变量或字符变量 进行交换
6 函数名重载 函数名重载就是多个函数使用一个函数名 先看下面的例子。 例4.1.1 对任意两个数据变量或字符变量 进行交换
void swap(char nl, char n2) ∥定义(1) char temp =nl: n1 n2=temp; void swap(int nl, int n2) ∥/定义(2) int temp=nI n2= temp void swap(float nl, float n2) ∥/定义(3) float te n2=temp void swap(double nl, double n2) ∥定义(4) double temp =nl n2= temp 7
7 void swap(char & n1,char & n2) // 定义( 1 ) { char temp = n1; n1 = n2; n2 = temp; } void swap(int & n1,int & n2) // 定义( 2 ) { int temp = n1; n1 = n2; n2 = temp; } void swap(float & n1,float & n2) // 定义( 3 ) { float temp = n1; n1 = n2; n2 = temp; } void swap(double & n1,double & n2) // 定义( 4 ) { double temp = n1; n1 = n2; n2 = temp; }
运算符重载 系统只预定义了少数几个用于基本类型的 运算符函数。对于更多的类型,需要程序 员自己去定义相应的运算符重载函数。通 过运算符重载,使已有的运算符可以用于 各种对象
8 运算符重载 系统只预定义了少数几个用于基本类型的 运算符函数。对于更多的类型,需要程序 员自己去定义相应的运算符重载函数。通 过运算符重载,使已有的运算符可以用于 各种对象
运算符重载 用户定义类型的重载运算符,要求能访问 运算对象的私有成员 为此只能用 成员函数 友元函数 两种形式定义运算符重载
9 运算符重载 用户定义类型的重载运算符,要求能访问 运算对象的私有成员 为此只能用 成员函数 友元函数 两种形式定义运算符重载
表达式 成员函数方式 友元函数方式 元运算表达式:ob@ obj. operatore@0).| operator@(obj,0) obj obj. operator@() operator @(obj) 三元运算表达式:1时2|0m0(o2|mmr(o,2) 10
10 表达式 成员函数方式 友元函数方式 一元运算表达式:obj @ @ obj obj.operator@ (0 ); obj.operator@( ) operator@(obj,0) operator @ ( obj ) 二元运算表达式:obj1 @ obj2 obj1.operator@ ( obj2 ); operator @ ( obj1, obj2 )