欢迎来到天天文库
浏览记录
ID:56970128
大小:488.51 KB
页数:97页
时间:2020-07-23
《范例程式matrix.h(样版类别matrix的完整定义).ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、樣版類別-向量和矩陣的定義向量和矩陣是線性代數和數值分析的基礎。藉由這兩個類別,我們介紹如何建立樣版類別(templateclass)。此外,我們還要在本章中討論動態建立和移除物件的語法。231/97樣版類別-向量和矩陣的定義23.1向量23.2Vector樣版類別23.3矩陣23.4Matrix樣版類別23.5物件陣列的動態創造和刪除23.6常犯的錯誤223.1向量把向量(vector)定義成物件的好處:1.將向量視為獨立的單元。2.透過運算子重載,將向量運算以最精簡、最接近數學式的方式表達。例如,向量間的加法和內積可以分別簡潔地寫成「V1+V
2、2」和「V1*V2」。3使用指標定義向量(1/2)考慮線性代數一般的使用習慣,可以犧牲第一個元素不用,而將記憶空間安排為N+1個元素:intN=5;float*V=newfloat[N+1];圖示如下:4使用指標定義向量(2/2)可以使用「delete」回收不再使用的記憶體資源。delete[]V;523.2Vector樣版類別定義樣版類別(classtemplate)。以下是一個簡化的例子:template//「T」代表一個尚未決定的資料型態classVector{private:intSize;T*V;public:Vecto
3、r(int);//建構函數不使用VectorVector(Vector&);//類別名稱以Vector表示~Vector();//解構函數不使用Vector};6定義樣版類別(一個以上的未定類別)定義樣版類別(一個以上的未定類別)templateclassVector{//...其他敘述};7以樣版類別Vector定義物件分別用來宣告一個整數向量Vi和一個浮點數向量Vd:VectorVi;VectorVd;8成員函數的定義在實作樣版類別的成員函數時,必需在每個成員
4、函數的定義前都加上「template」的宣告。例如,Vector的建構函數可以寫成:templateVector::Vector(intN){Size=N;V=newT[N+1];return;}9Vector的解構函數templateVector::~Vector(){delete[]V;}10加法operator+()的重載成員函數templateVectorVector::operator+(constVector&V2){Vector
5、Temp(Size);for(inti=1;i<=Size;i++)Temp.V[i]=V[i]+V2.V[i];returnTemp;}11完整的Vector樣版類別樣版類別Vector的完整程式寫成檔案Vector.h。這個樣版類別的定義中包括了:建構函數(constructor)複製建構函數(copyconstructor)解構函數(destructor)指派運算子(assignmentoperator,=)「+」、「-」、「*」、「/」等四個運算子的重載。12運算子「*」在程式Vector.h中,運算子「*」被重載了三次:(1)純
6、量乘以向量。例如V1=2.5*V2;(2)向量乘以純量。例如V1=V2*2.5;(3)向量的內積。例如doublex=V1*V2;其中(1)「純量乘以向量」只能以friend函數寫成,因為運算子的左側運算元不是Vector物件。13專門用來發出檢查訊息的函數(1/2)例如,做向量加法前,要檢查兩個向量的長度是否相同。inlinevoidCheck(boolErrorCondition,conststring&Message="Requirementfailed"){if(ErrorCondition){cerr<7、it(1);}}14專門用來發出檢查訊息的函數(2/2)將判斷式和錯誤訊息以參數的方式傳遞//定義加法運算子operator+()templateVectorVector::operator+(constVector&V2){Check(Size!=V2.Size,"加法運算錯誤,長度不相同!");VectorTemp(Size);for(inti=1;i<=Size;i++)Temp.V[i]=V[i]+V2.V[i];returnTemp;}15配置新記憶空間的成員函數建構函數,複製建構函數,和指派運算8、子「=」都有配置新記憶空間的動作。因此,我們將這個動作集中寫成inline函數Create():templatevoid
7、it(1);}}14專門用來發出檢查訊息的函數(2/2)將判斷式和錯誤訊息以參數的方式傳遞//定義加法運算子operator+()templateVectorVector::operator+(constVector&V2){Check(Size!=V2.Size,"加法運算錯誤,長度不相同!");VectorTemp(Size);for(inti=1;i<=Size;i++)Temp.V[i]=V[i]+V2.V[i];returnTemp;}15配置新記憶空間的成員函數建構函數,複製建構函數,和指派運算
8、子「=」都有配置新記憶空間的動作。因此,我們將這個動作集中寫成inline函數Create():templatevoid
此文档下载收益归作者所有