面向对象程序设计 第四讲C艹+语言基础 5.4函数 堂提要 5.5数组与指针 第五章C++基础 51C++概述 52数据和表达式 53基本语句 54函数 55数组与指针
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 第四讲 C++语言基础 5.4 函数 5.5 数组与指针
面向对象程序设计 引用 (reference):C+的特点 什么是引用:引用是一个别名,是某一个 目标对象的替代名.对所有加于引用上的 操作实际上就是加于引用的目标对象之 堂提要 第五章C++基础 例如:intx ∥定义了变量x 51C++概述 int&rx=x,∥定义了x的一个引用 52数据和表达式 53基本语句 问题:1.为什么要用引用? 5.4函数 2.引用与指针的区别? 55数组与指针 3.引用的功能是什么? 4.在引用的使用中要注意什么?
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 引用(reference): C++的特点 什么是引用: 引用是一个别名, 是某一个 目标对象的替代名. 对所有加于引用上的 操作实际上就是加于引用的目标对象之 上. 例如: int x; //定义了变量 x int &rx = x; //定义了x的一个引用 问题: 1. 为什么要用引用? 2. 引用与指针的区别? 3. 引用的功能是什么? 4. 在引用的使用中要注意什么?
面向对象程序设计 传值调用和引用调用 例2:希望通过传值调用交换变量值 #include void Swap(int,int);∥声明函数 堂提要 void main() intx-4,y=8;∥定义变量 第五章C++基础 cout << n Before Swap=<<X 51C++概述 endl 52数据和表达式 Swap(x, y) ∥调用函数 53基本语句 cout << n After Swap x<<X 5.4函数 endl 55数组与指针 void Swap(int a, int b)int t=a; a=b; b=t;) 结果 Before Swap x=4,y=8为什么? After Swap x=4,y=8传值调用
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 传值调用和引用调用 例2: 希望通过传值调用交换变量值 #include void Swap(int, int); //声明函数 void main( ) { int x=4, y=8; //定义变量 cout << "\n Before Swap x= "<< x << " , y= "<< y << endl; Swap(x, y); //调用函数 cout << "\n After Swap x=" << x << " , y= "<< y << endl; } void Swap(int a, int b) {int t=a; a=b; b=t; } 结果: Before Swap x=4, y=8 After Swap x=4, y=8 为什么? 传值调用
面向对象程序设计 例:通过指针调用交换变量值 #include <iostream. h void Swap(int*,int*),/声明函数 void main() intx-4,y=8;∥定义变量 堂提要 cout<<n Before Swap x<X y << endl 第五章C++基础 Swap(&x&y),/通过指针调用函数51C+概述 cout <<"n After Swap x=<<x 52数据和表达式 y < endl; i 53基本语句 void Swap(int*a, int*b) 5.4函数 {int;t=*a;*a=*b;,*b=t;} 55数组与指针 结果 Before Swap x=4,y=8为什么? After Swap x=8,y=4指针调用
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 例: 通过指针调用交换变量值 #include void Swap(int*, int*); //声明函数 void main( ) { int x=4, y=8; //定义变量 cout << "\n Before Swap x= "<< x << " , y= "<< y << endl; Swap(&x, &y); //通过指针调用函数 cout << "\n After Swap x=" << x << " , y= "<< y << endl; } void Swap(int *a, int *b) {int t; t=*a; *a=*b; *b=t; } 结果: Before Swap x=4, y=8 After Swap x=8, y=4 为什么? 指针调用
面向对象程序设计 例:通过引用调用交换变量值 #include void Swap(int&,int&);∥声明函数 void main() intx-4,y=8;∥定义变量 堂提要 cout<<n Before Swap x<X y < endl 第五章C++基础 Swap(xy);,∥调用函数 51C++概述 cout <<"n After Swap x=<<x 52数据和表达式 y < endl; i 53基本语句 void Swap(int &a, int &b) 5.4函数 fint t=a; a=b; b=t;) 55数组与指针 结果 Before Swap x=4,y=8为什么? After Swap x=8,y=4引用调用
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 例: 通过引用调用交换变量值 #include void Swap(int&, int&); //声明函数 void main( ) { int x=4, y=8; //定义变量 cout << "\n Before Swap x= "<< x << " , y= "<< y << endl; Swap(x, y); //调用函数 cout << "\n After Swap x=" << x << " , y= "<< y << endl; } void Swap(int &a, int &b) {int t=a; a=b; b=t; } 结果: Before Swap x=4, y=8 After Swap x=8, y=4 为什么? 引用调用
面向对象程序设计 引用与指针关系的分析 void Swap(inta,intb)∥传值调用 fint t=a; a=b; b=t;) void Swap( (int &a,int&b)∥引用调用 堂提要 fint t=a; a=b; b=t;) 第五章C++基础 void Swap(int*a,int*b)∥指针调用 {int;t=*a;,*a=*b;*b=t;} 51C++概述 52数据和表达式 区别:1.引用是某一对象的别名指针是53基本语句 某一变量的地址变量 5.4函数 2引用在定义时就必须初始化,即55数组与指针 为一已定义的对象的别名,不可 以重新赋值.指针可在使用时初 始化,且可以重新赋值
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 引用与指针关系的分析 void Swap(int &a, int &b) //引用调用 {int t=a; a=b; b=t; } void Swap(int *a, int *b) //指针调用 {int t; t=*a; *a=*b; *b=t; } void Swap(int a, int b) //传值调用 {int t=a; a=b; b=t; } 区别: 1. 引用是某一对象的别名, 指针是 某一变量的地址变量. 2. 引用在定义时就必须初始化, 即 为一已定义的对象的别名, 不可 以重新赋值. 指针可在使用时初 始化, 且可以重新赋值
面向对象程序设计 引用的作用 1.引用可以象地址一样完成对所代表的 对象的操作 堂提要 2.对引用的操作不同与对指针的操作 它可直接作用于变量,所以更方便,更易 第五章C++基础 于理解. 51C++概述 引用的缺点 52数据和表达式 53基本语句 引用不能为空,即必须代表某一象,且不 5.4函数 能重新赋值.指针灵活性较好,但使用较 55数组与指针 不方便
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 引用的作用: 1. 引用可以象地址一样完成对所代表的 对象的操作. 2. 对引用的操作不同与对指针的操作, 它可直接作用于变量, 所以更方便, 更易 于理解. 引用的缺点: 引用不能为空, 即必须代表某一象,且不 能重新赋值. 指针灵活性较好, 但使用较 不方便
面向对象程序设计 函数名重载:C+的特点 问题:设计一个函数完成两个数相加 分析:用C语言,就必须设计两不同名函数 int ladd (int a, int b) 堂提要 float Fadd(float a, float b) 它们分别完成对整型和实型数的加法 第五章C++基础 51C++概述 若用C++,就可以两个同名的函数 52数据和表达式 int add(int a, int b) 53基本语句 float add(float a, float b 5.4函数 它们分别完成对整型和实型数的加法.55数组与指针 作用:由于函数名相同,在函数调用时不必 考虑实参数的类型,使编程更便利
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 函数名重载: C++的特点 问题: 设计一个函数完成两个数相加. 分析: 用C语言, 就必须设计两不同名函数: int Iadd(int a, int b); float Fadd(float a, float b); 它们分别完成对整型和实型数的加法. 若用C++, 就可以两个同名的函数: int add(int a, int b); float add(float a, float b); 它们分别完成对整型和实型数的加法. 作用: 由于函数名相同, 在函数调用时不必 考虑实参数的类型, 使编程更便利
面向对象程序设计 什么是函数重载:对同一函数进行多次定义 Wyl: #include int fname(intp)/定义函数 i cout <<"one; return p*p;) 堂提要 char fname( char p)/定义函数 第五章C++基础 i cout << two return p+4; 1 void main() 51C++概述 52数据和表达式 i cout < fname(4)<< endl; / 53基本语句 cout << fname( a)<<endl; / 5.4函数 55数组与指针 结果 one 16 two
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 什么是函数重载: 对同一函数进行多次定义 例: #include int fname(int p) //定义函数 { cout << "one "; return p*p; } char fname(char p) //定义函数 { cout << " two "; return p+4; } void main( ) { cout << fname(4) << endl; // cout << fname(‘a’) << endl; // } 结果: one 16 two d
面向对象程序设计 递归函数 什么是递归 个函数直接或间接地 调用自己 堂提要 何时用递归问题可被简化,边界有界 第五章C++基础 如 Fibonacci i数列,我们有 fibo(0)=1 有边界 51C++概述 fibo (1=1 有边界 52数据和表达式 fibo(n)=fibo(n-1)+fibo(n-2) 可简化53基本语句 5.4函数 为何用递归使难以实现的编程简单化「55数组与指针
第五章 C++基础 5.1 C++概述 5.2 数据和表达式 5.3 基本语句 5.4 函数 5.5 数组与指针 递归函数 什么是递归 一个函数直接或间接地 调用自己 何时用递归 问题可被简化, 边界有界 如 Fibonacci数列,我们有: fibo(0)=1 fibo(1)=1 fibo(n)=fibo(n-1)+fibo(n-2) 有边界 有边界 可简化 为何用递归 使难以实现的编程简单化