C++視頻學習系列:《C++面向對象高級開發》學習筆記(1)

最近開始看侯捷老師的C++視頻:面向對象高級開發,邊看邊記錄自己理解的知識點。

目前看了P1-P6,其實如果之前有C++的基礎,而且看過一兩本C++方面的書籍,前面幾節還是看的很快的,我平均是按照1.25的倍速看的(侯老師的語速很慢,每個知識點將的都很清楚)。

總體來說前6節課就是重點在講如何正規的寫C++代碼,按照侯老師的說法是培養正規的、大氣的編程習慣,一出手就能不同凡響。那該如何寫出正規的大氣的C++的代碼呢?前幾節侯老師一直強調的大概就是以下幾點了。

1、儘量使用成員初始化列表對類的成員進行初始化

什麼是成員初始化列表?我們來看看《Essential C++》中給的用法。(P106)
Memeber initialization list(成員初始化列表)緊接在參數列表最後的冒號後面,是個以逗號分隔的列表。其中欲賦值給member的數值被放在member名稱後面的小括號中。
成員初始化列表

class complex
{
	complex(double r=0,double i=0)
		:re(r),im(i)
	{}
	private:
		double re,im;

}

在構造函數內部賦值

class complex
{
	complex(double r=0,double i=0)
	{
		re=r;
		im=i;
	}
	private:
		double re,im;

}

2、成員變量設置爲private

這個是爲了體現C++類的封裝性。

3、傳遞時儘量用引用傳遞(pass by reference),不要用值傳遞(pass by value)

這個很好理解,當我們要傳遞的對象內容很多時,傳引用要比傳值快很多,因爲傳值需要重新賦值一遍。傳引用只是把地址傳遞過去。具體引用傳遞怎麼用就不寫啦,網上這方面的文章提多的。

4、函數該不該加const要格外注意

class complex
{
	complex(double r=0,double i=0)
		:re(r),im(i)
	{}
	
	double real() const { return re;}  //函數名後有const,表示不改變數據內容
	double imag() {return im;}    //imag()後面沒有const修飾。
	
	private:
		double re,im;

}

void main()
{
	const complex c(2,1);
	cout<<c.real()<<endl; //正常
	cout<<c.imag()<<endl; //編譯器提示錯誤
}

我們先定義了一個常量對象,然後用對象調用成員函數,測試發現加了const修飾的成員函數real()可以正常調用,不加const修飾的imag()函數調用失敗,why?因爲我們的對象是個常量,不能改變數據,但是imag()沒有被const修飾,修改器認爲這個函數可能會改變數據,所以是矛盾的。

5、return的時候是return by value還是 return by reference

函數return結果的時候,要看返回的對象是在函數內部臨時建立的,還是通過引用傳遞過來的,如果是臨時建立的就要用return by value。
return by value

int plus(const int x,const int y)
{
	return x+y;
}

return by reference

int & plus(const int &x,const y)
{
	x+=y;
	return x;
}

總之前幾節的收穫就是我們要以正規的、大氣的方式的寫C++代碼。

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