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

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

 

//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>,再进行定义。在定义每一个函数时,都需要定义一次函数模 版。

未验证 | 阅读 4915 次
文章评论,共2条
vfdff(作者)
2008-04-20 12:53
1
一个对话框中有多组单选按钮Radio button

把他们分别group起来,然后把每个group中的第一个单选框的属性设为group,其他的默认值,在初始化的时候想让那个单选框被选中就给你的group变量的值赋为几,那个被group的值为0
vfdff(作者)
2008-04-20 12:53
2
point 
是相对CLYHchxuView的坐标 
如果你要获的是相对CLYHchxuView左上角的坐标 
就不需要转换 
如果你你要获的是相对程序主窗口左上角的坐标 
可以这样算 
void CLYHchxuView::OnLButtonDblClk(UINT nFlags, CPoint point) 

// TODO: Add your message handler code here and/or call default 

CRect rc; 
GetParent()-&gt;GetWindowRect(&amp;rc); 
ClientToScreen(&amp;point); 
docx=point.x-rc.left; 
docy=point.y-rc.top; 
Invalidate(); 
CView::OnLButtonDblClk(nFlags, point); 
}
游客请输入验证码
浏览1937001次