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++代码。

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