最近开始看侯捷老师的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++代码。
网友评论