平時照著書上敲代碼,沒有發現什麼錯誤,最多是自己失誤把字母敲錯了,可是輪到自己寫代碼時,出現了一大堆錯誤,錯誤五花八門,但是主要還是對知識概念不熟造成的,學習編程語言的時候還是要多做練習,光敲書上的例子是得不到多大進步的。
這個代碼是定義一個重載函數,重載‘+’,使其完成數組相加的功能,最後返回結果。
#include <iostream>
class test //類名
{
private:
int m[2];
public:
test(); //構造函數
test(int c[]);
test operator+(const test & t)const; //重載操作符‘+’
void Show1() const; //顯示結果
};
test::test()
{
m[0] = 0;
m[1] = 0;
}
test::test(int c[])
{
int i;
for(i = 0; i < 2; i++)
{
m[i] = c[i];
}
}
test test::operator +(const test & t)const //重載操作符'+'
{
test sum;
sum.m[0] = m[0] + t.m[0];
sum.m[1] = m[1] + t.m[1];
return sum;
}
void test::Show1()const
{
std::cout << "array = " << m[0] + m[1] <<std::endl;
}
int main() www.2cto.com
{
int ar0[2] = {1, 2};
int ar1[2] = {3, 4};
test array0(ar0);
test array1(ar1);
array0.Show1();
array1.Show1();
test to;
to = array1 + array0;
to.Show1();
return 0;
}
源代碼如上,首先定義了一個test類,私有成員是一個長度為2的int數組,公有成員四個,一個是構造函數test(),在這裡要注意,構造函數的名稱要與類名相同(析構函數是在類名前加一個‘~’符號),它的主要作用是初始化數組,這個從後面的函數定義就可以看出來,將數組初始化成零,test(int c[ ]),構造函數的參數名稱不能和類成員名稱相同,所以不能使用int m[ ]作為構造函數的形參。
test operator+(const test & t)const為操作符重載函數,其中operator+為函數名,表明重載操作符‘+’,最前面一個test表明函數的返回值為test類,最後面的一個const可以保證重載函數不修改調用它的類,在本例中,可以保證重載函數不修改array1,括號裡的const表示test & t在其壽命周期內不能被改變,&t是一個引用,是作為調用函數實參的引用,它的類型是test類。(小提一下const和define的區別,兩者都可以定義常量,define只是相當於文本替代,而const定義了常量的類型).
void Show1()const,後面的const同樣是為了防止Show1()改變調用對象而設置的。
下面來看一下函數的定義,前面已經說了,第一個構造函數主要是將數組初始化為零;在C++中,有私有成員和公有成員,使用類對象的程序都可以直接訪問公有部分,但是只能通過公有成員函數訪問私有成員,所以第二個構造函數的作用是將非類成員數據賦給類的私有成員數據。在看重載函數之前,我們看一看主函數中這一段代碼:to = array1 + array0;這句話實際上實在調用重載函數,其中array1為調用函數的對象,array0為調用函數的實參,這段代碼等價與array1.operator+(array0),函數定義中的sum.m[0] = m[0] + t.m[0]等價於sum.m[0] = this->m[0] + t.m[0],這句代碼的意思是將array1和array0數組的第一個元素相加,然後存於test對象sum的數組m[ ] 的第一個元素中,函數定義的最後返回sum。
函數還可以進行進一步擴展,用const int LEN = 2代替直接寫出數組長度,數組內容由用戶從鍵盤輸入,而不是在程序裡預先賦值。
現在發現自己還有很長一條路要走,在這條路上,當你能夠用程序將你心中所想輕而易舉的表達出來時,你離成功就很近了。
摘自 maochencw的專欄