在上一期的“數(shù)組和基本順序結構”一文中我們講到,優(yōu)秀的程序員自覺地把函數(shù)分為基本操作函數(shù)和應用函數(shù),然后把基本操作函數(shù)和基本順序表結構看作一個整體,當作一個類型,用于應用函數(shù)即程序的設計和實現(xiàn),表1簡要概括了這些內(nèi)容。

可是C語言編譯器沒有把這兩類函數(shù)區(qū)別開,它們的聲明、定義和調(diào)用方式都一樣。不僅如此,它們對結構成員的訪問權限也一樣,應用程序可以直接訪問結構成員,例如表1中的Purge函數(shù)可以修改為:
void Purge(SeqList *L)
//刪除表中的重復數(shù)據(jù)
{
int i,j;
for(i=0;i<L->size;i++)//直接訪問結構成員size
{
j=i+1;
while(j<L->size)
if(L->data[i]==L->data[j]) //直接訪問結構成員data
Erase(L,j);
else
j++;
}
}
而C++編譯器克服了C的局限性,實現(xiàn)程序員的設計方法,從概念和語法兩個方面把兩類函數(shù)區(qū)分開來。
1.從C基本順序表到C++基本順序表類的轉換
下面我們分十步把表1中簡化的C基本順序表結構轉化為C++基本順序表類。
① 布爾型函數(shù)。C++增加了布爾型,它占用一個字節(jié),僅取兩個值:真和假(true和1),對應的整型值是1和0。于是,對取真假值的函數(shù),應將其返回值定義為布爾型。例如:
bool ListEmpty(const SeqList *l);//判空
② 將宏常量改為const常量。例如將
#define MaxSeqSize 100
改為
const int MaxSeqSize=100;
在C++中一般都用const常量或者枚舉常量來代替宏常量,這是因為宏代表的是在預處理階段完成的一種文本替換過程,它忽略了語言的作用域、類型系統(tǒng)和所有其他的語言特性和規(guī)則,這使它和語言本身割裂開來。
③ 常量型引用調(diào)用。把帶有形式數(shù)據(jù)類型參量的值調(diào)用函數(shù)改為常量型引用調(diào)用[1]:
void InsertRear(SeqList *l, const Type item);//尾插
④ 函數(shù)類型是常量型引用。若函數(shù)類型是形式數(shù)據(jù)類型,則將其改為常量型引用[1]:……p>