C++面向对象程序设计计算机与信息学院罗宪第二章 C++面向过程部分内容回顾
不能建立指向引用的指针;如:
int *&p ; —— 错误的定义 。
( int i ; int &j=i; int *p=&j;—— 合法的定义,即为所指向变量的地址 ) ;
不能建立引用的引用 。 如:
int &&x;—— 错误的定义 。
( int i; int &j=i;int &k=j;—— 合法的定义 ) 。
㈡ 引用的应用
1,用引用变量作为函数的形参例 【 2.3】
第二章 C++面向过程部分内容回顾
#include <iostream.h>
void swap(int &p,int &q);
void main()
{ int x,y;
x=20;y=30;
cout <<"x="<<x<<" y="<<y;
cout<<endl;
swap(x,y);
cout <<"x="<<x<<" y="<<y;
cout<<endl;
}
void swap(int &p,int &q)
{ int t;
t=p;p=q;q=t;
}
第二章 C++面向过程部分内容回顾
2、引用作为函数的返回值例 【 2.4】
#include "iostream.h"
const int N=100;
float &max(int n,float x[]);
float &min(int n,float x[]);
void array_in(int n,float x[]);
void main()
{ int n;float x[N],ma,mi;
cout<<"Please enter array size(1-100):";cin>>n;
array_in(n,x);
ma=max(n,x);
mi=min(n,x);
cout<<"max="<<ma<<" min="<<mi<<endl;
}
第二章 C++面向过程部分内容回顾
void array_in(int n,float x[]){ int i;
for(i=0;i<n;i++){ cout<<"x["<<i<<"]=";cin>>x[i]; }
}float &max(int n,float x[])
{ int i;static float m;m=x[0];
for (i=1;i<n;i++)if(m<x[i]) m=x[i];
return m;}
float &min(int n,float x[]){ int i;static float m;
m=x[0];for (i=1;i<n;i++)
if(m>x[i]) m=x[i];return m;
}
第二章 C++面向过程部分内容回顾
3、函数名作为左值例 【 2.5】
#include <iostream.h>int a[]={1,3,5,7,9};
int &index(int i);void main()
{ int i;index(2)=100;
for (i=0;i<5;i++)cout <<a[i]<<" ";
cout <<endl;for (i=0;i<5;i++)
{ index(i)++;cout <<index(i)<<" ";
}cout <<endl;
}int &index(int i)
{return a[i];}
第二章 C++面向过程部分内容回顾三,const修饰符(教材① P37-41)
㈠ 用 const定义常量
1、基本数据类型
格式,const 类型 常量名 =表达式;
或,类型 const 常量名 =表达式;
说明:定义常量后,常量的值不能不能改变 。
2,定义常量数组
格式,const 类型 数组名 [元素个数 ]={初值表 };
或,类型 const 数组名 [元素个数 ]={初值表 } ;
说明:定义常量数组后,数组元素的值不能不能改变 。
第二章 C++面向过程部分内容回顾如,const int a[10]={1,2,3,4,5,6,7,8,9,10}
另外,结构体变量及对象也可定义为常量。
㈡ 常量与指针一起使用
1,指向常量的指针如,const char *name=”chen”;
表示定义一个指向常量,chen”的指针变量 。 即:
由于 name是一变量,它可以指向另一常量 。 如可用:
name=”stu”;
但常量的值不能改变 。 如不能使用,name[2]=’i’;
2.常指针如,char *const name=”chen”;
—— 表示指针 name是一个常量,它不能指向另一个字符串。
第二章 C++面向过程部分内容回顾
name=”stu”;—— 错误
name[2]=’i’;—— 字符串可以改变;
3、指向常量的常指针如,const char *const name=”chen”;
—— 表示指针 name是一个常量,所指向的对象也是一个常量。指针值及指向的字符串的值均不能改变。
第二章 C++面向过程部分内容回顾四、作用域运算符,:
当全局变量与局部变量同名,而需要在函数内使用全局变量时,可以用作用域运算符,:使用全局变量。
例 【 2.6】
#include <iostream.h>
int avar=50;
void main()
{int avar=20;
avar=avar*5;
::avar=::avar*3;
cout<<"local avar="<<avar<<endl;
cout<<"public avar="<<::avar<<endl;
}
第二章 C++面向过程部分内容回顾五,内置函数 ( 内联函数 )
1,内置函数的定义
inline 数据类型 函数名 ( 形参说明 )
{ … }
例 【 2.7】
#include <iostream.h>
const float pi=3.14;
inline float area(float r)
{ return pi*r*r;}
void main()
{ float r,s;
cout <<"r=";cin >>r;
cout <<"s="<<area(r)<<endl;
}
第二章 C++面向过程部分内容回顾二、带缺省参数的函数
C++在函数说明时,可以定义函数调用时的缺省参数。
如:
float func(float x=20.0,float y=30.0)
{ … }
当调用该函数时:
func(80.0,100.0); —— 调用时 x=80.0,y=100.0
func(80.0) —— 调用时 x=80.0,y=30.0
func( )—— 调用时 x=20.0,y=30.0
说明:
1、定义函数时,缺省参数必须在不缺省参数的右边;
如,float func(float x,float y=30.0)
2、调用带缺省参数的函数时,略省略某个参数,后面的参数必须都缺省。
第二章 C++面向过程部分内容回顾七、函数重载函数重载是指用相同的函数名,调用不同的函数。
㈠ 函数参数类型不同的重载例 【 2.8】
第二章 C++面向过程部分内容回顾
#include <iostream.h>
int square(int x)
{return x*x;}
float square(float x)
{return x*x;}
double square(double x)
{return x*x;}
void main()
{int a=5;float b=10.0;double c=20.0;
cout <<a<<'*'<<a<<'='<<square(a)<<endl;
cout <<b<<'*'<<b<<'='<<square(b)<<endl;
cout <<c<<'*'<<c<<'='<<square(c)<<endl;
}
第二章 C++面向过程部分内容回顾
㈡ 参数个数不同的重载例 【 2.9】
#include <iostream.h>
int max(int a,int b)
{int m;
if (a>b) m=a;
else m=b;return m;
}
int max(int a,int b,int c)
{int m;
if (a>b) m=a;else m=b;
if (m<c) m=c;
return m;
}
第二章 C++面向过程部分内容回顾
int max(int x[ ],int n)
{int i,m;
m=x[0];
for(i=1;i<n;i++)
if(m<x[i])
m=x[i];
return m;
}
void main()
{int a=10,b=20,c=15;
int x[5]={20,40,30,50,35};
cout <<max(a,b)<<endl;
cout <<max(a,b,c)<<endl;
cout <<max(x,5)<<endl;
}
第二章 C++面向过程部分内容回顾作业:
P30-P31:第一、二、三、四题。其中三题做在作业本上,其余做在书上。
P68-P82:第一、二、三、四题。全做在书上。
(要求做在书上的作业采用抽查的形式检查)
实验:
编写求最大值的重载函数。要求:
参数个数不一致:二个参数、三个参数、数组
参数的数据类型不一致:整型、双精度型
—— 结果保存在文件中备查