类声明和成员函数定义的分离示例

      在面向对象的程序开发中,一般将类和其成员函数的声明放在指定的头文件中,将成员函数的定义放在另一个源文件中。从而提高编程效率和实现信息隐蔽。下面以一个线性表为例。  

 

// seq.h
#ifndef seq_H
#define  seq_H

const   int  MaxSize = 100 ;
template 
< class  T >

class  SeqList
{
public:
    SeqList();
    SeqList(
int a[],int n);
    
~SeqList();

    
int Length();
    T Get(
int i);
    
int Locate(T x);
    
void Insert(int i,T x);
    T Delete(
int i);
    
void PrintList();
private:
    T data[MaxSize];
    
int length;
}
;

#endif

 

// seq.cpp
#include  < iostream.h >
#include 
" seq.h "

template 
< class  T >
SeqList
< T > ::SeqList()
{
    length
=0;
}


template 
< class  T >
SeqList
< T > ::SeqList( int  a[], int  n)
{
    
if(n>MaxSize) throw "error";
    
for (int i=0;i<n;i++)
        data[i]
=a[i];
    length
=n;
}


template 
< class  T >
int  SeqList < T > ::Length()
{
    
return length;
}


template 
< class  T >
void  SeqList < T > ::Insert( int  i,T x)
{
    
if(length>=MaxSize)
        
throw "shangyi";
    
if(i<1||i>length+1
        
throw "weizhiyichang";
    
for(int j=length;j>=i;j--)
        data[j]
=data[j-1];
    data[i
-1]=x;
    length
++;
}


template 
< class  T >
T SeqList
< T > ::Delete ( int  i)
{
    
if(length==0)
        
throw "xiayi";
    
if(i<1||i>length)
        
throw "weizhiyichang";
    x
=data[i-1];
    
for(int j=i;j<length;j++)
        data[j
-1]=data[j];
    length
--;
    
return x;
}


template 
< class  T >
T SeqList
< T > ::Get ( int  i)
{
    
if(i<1||i>length)
        
throw "chazhaoweizhifeifa";
    
else
        
return data[i-1];
}


template 
< class  T >
int  SeqList < T > ::Locate (T x)
{
    
for (int i=0;i<length;i++)
        
if(data[i]==x)
            
return (i+1);
    
return 0;
}

      其中值得注意的有两点。首先是头文件中的预处理命令。有时,一个复杂的项目中有包含其他文件的文件,这样在编译一个文件就存在一个头文件被重读两次候两个接口循环调用的危险。为了避免这种情况,每个头文件在读类接口时都使用预处理命令定义一个符号。头文件的第一行检测该符号是否是未定义的,如果是,就接着处理文件否则就不处理(跳到#endif)。其次,在头文件中使用了类模版,对于一个类声明,只需定义一次类模版。而在源文件中定义函数,必须先将类模版实例华为类SeqList<T>,再进行定义。在定义每一个函数时,都需要定义一次函数模版。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值