一段代碼引發的思考-----(類及操作符重載,數組相加)

平時照着書上敲代碼,沒有發現什麼錯誤,最多是自己失誤把字母敲錯了,可是輪到自己寫代碼時,出現了一大堆錯誤,錯誤五花八門,但是主要還是對知識概念不熟造成的,學習編程語言的時候還是要多做練習,光敲書上的例子是得不到多大進步的。


這個代碼是定義一個重載函數,重載‘+’,使其完成數組相加的功能,最後返回結果。

#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()
{

	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代替直接寫出數組長度,數組內容由用戶從鍵盤輸入,而不是在程序裏預先賦值。


現在發現自己還有很長一條路要走,在這條路上,當你能夠用程序將你心中所想輕而易舉的表達出來時,你離成功就很近了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章