当前位置:文档之家› C++教程第07章 类与对象-2成员函数的重载

C++教程第07章 类与对象-2成员函数的重载

第7章类与对象
7.1 类和对象
7.2成员函数的重载
1.成员函数重载的原则与普通函数重载的原则相同,即重载函数之间靠所包含的参数的类型或个数之间的差异进行区分。

2.成员函数的重载只是针对同一个类中的成员函数,对于不同类中的成员函数之间以及成员函数与不属于任何类的普通函数之间则不存在重载关系。

因为它们属于不同的作用域,因此它们不仅函数名可以相同,而且它们的参数也可以完全一样。

例7.2.1成员函数的重载:处理一个数组构成的线性表,动态产生线性表,并输出线性表中的数据
#include<iostream.h>
class ListClass
{ int *List ;//指向线性表的指针
unsigned nMax ;//线性表中最大长度
unsigned nElem ;//表中当前元素的个数
public:
void Init (int n=10) //初始化线性表,最大长度的默认值为10
{ List=new int [n] ;//动态分配存储空间
nMax=n ;
nElem=0 ;//表中当前元素的个数为0
}
int Elem(int) ;
int &Elem(unsigned n){return List [n] ;} //返回线性表中第n个元素的引用
unsigned Elem(void) {return nElem ;} //获取当前元素的个数
unsigned Max (void){return nMax ;} //获取线性表的长度
void Print (void) ;
int GetElem(int i) //获取线性表中第i个元素的值
{
if((i>=0)&&(i<=nElem))return List [i] ;
else return 0;
}
void Destroy (void) {delete [nMax]List ;} //释放线性表占用的存储空间};
int ListClass ::Elem(int elem) //在线性表的末尾增加一个元素,返回当前元素的个数{
if(nElem<nMax){ //线性表未满,向末尾加一个元素
List[nElem++]=elem;
return nElem ;
}
else{ //线性表已满,重新申请一个新的线性表int*list ;
list=new int [nMax+1];
for(int i=0 :i<nElem ; i++) list [i]=List[i] ;//将线性表的数据保存在list中
delete [nMax]List ;//将原来的线性表所占用的空间释放
nMax++ ;//将线性表的最大长度加1
List=list ;
List[nElem++]=elem ;
return nElem ;
}
}
void ListClass ::Print(void) //输出线性表的所有元素
{
for(int i=0 :i<nElem ;i++) cout <<List[i]<<'\t' ;
cout<<'\n' ;
}
void main (void )
{ ListClass list ,list1;
list.Init(10) ;
list1.Init(20) ;
for (int i=0 ;i<10 ;i++)
list1.Elem(i) ;
cout<<"线性表list的元素的个数为:"<<list.Elem( )<<'\n' ;
cout<<"线性表list长度为:"<<list.Max()<<'\n' ;
cout<<"线性表list1的元素的个数为:"<<list1.Elem()<<'\n' ;
cout<<"线性表list1长度为:"<<list1.Max()<<'\n' ;
list1.Print() ;
list1.Elem(3u)=100 ;
cout<<"现在线性表list1中的第三个值为;"<<list1.Elem(3u)<<'\n' ;
list1.Elem(20) ;
list1.Elem (200) ;
cout<<"现在线性表list1中元素的个数为:"<<list1.Elem()<<'\n' ;
list1.Print() ;
cout<<"现在线性表list1中的最后一个元素为:"<<list1.GetElem(list1.Elem()-1)<<'\n' ;
list.Destroy();
list1.Destroy();
}
运行结果:
线性表list的元素的个数为:0
线性表list长度为:10
线性表list1的元素的个数为: 10
线性表list1长度为:20
0 1 2 3 4 5 6 7 8 9
现在线性表list1中的第三个值为:100
现在线性表list1中元素的个数为:12
0 1 2 100 4 5 6 7 8 9 20 200
现在线性表list1中的最后一个元素为:200
例7.2.2 成员函数与非成员函数之间的函数名可以相同
# include <iostream.h>
class CAdd
{
public:
int Add (int a ,int b) //A
{return a+b ;}
double Add(double x ,double y) //B
{return x+y ;}
};
int Add (int a , int b)
{ return a - b ;} //C
return a+b ;
void main ()
{ CAdd c;
cout<<"5+3="<<c.Add(5 ,3)<<endl;//调用A行定义的函数cout<<"3.5+6.1="<<c.Add(3.5,6.1)<<endl ;//调用B行定义的函数
cout<<"5+10="<<Add(5,10)<<endl ;//调用C行定义的函数cout<<"10 - 5="<<Add(10,5)<<endl ;
}
运行结果:
5+3=8
3.5+6.1=9.6
5+10=15
10 – 5 = 5。

相关主题