C++学习笔记 2014-10-8
2014-10-08 23:05 想打架的蜜蜂 阅读(133) 评论(0) 收藏 举报1、break语句可以用于退出一个循环,执行break语句之后,循环语句立即终止,并继续执行循环语句之后的语句,break语句可用于任何形式的循环中,包括while、do-while或者for循环。break语句只终止了他的内层的循环。如果在一个循环中嵌套另一个循环,而且在内层循环中使用了一个break语句,那么break语句终止的就只是内层循环。
2、一个类的私有成员变量在类的外部不能访问,要在类外部的一个函数也能像成员函数一样访问私有变量,则将此函数变成类的友元函数即可以,方法:友元函数不仅能访问私有变量也能改变私有变量的值,如何定义友元,如下:
class DayOfYear
{
public:
friend bool equal(DayOfYear date1,DayOfYear date2);
private:
int month;
int day;
}
3、类的友元函数本质上是一个普通的函数,只不过它能访问那个类的对象的私有成员。友元函数并不是成员函数,友元函数的定义与调用方式与普通函数相同。调用友元函数时,不要用原点操作符。在友元函数的定义中,也不需要使用类型限定符。
4、const参数修饰符
从效率上来说,“传引用调用”优于传值调用参数,传值调用参数是一个局部变量,他被初始化为他的参数值,所以在调用函数时,就会存在参数值得两个拷贝,使用传引用调用参数,参数只是一个占位符,他会被参数值取代,所以只存在参数值得一个拷贝,如果使用的是一个传引用调用参数,而且你的函数不会更改参数值,就可以为参数做上记号,让编译器知道参数是不可以更改的,为此添加const关键字。称为常量参数。如:
class Money
{
public:
friendly Money add(const Money& amount1,const Money& amount2);
//如果是成员函数,关键字const要放在函数申明的后面,刚好在末尾的分号之前,如
void output (ostream& outs) const;
}
修饰符const要求同时用于函数申明和函数定义之中,所以output的函数定义像下面这样开头:
void Money ::output(ostream& outs) const
{....}
对于一个传引用调用参数,如果他的类型之前添加了一个修饰符const,该参数就称为常量参数,编译器就知道了该参数不应该更改,如果程序错误的更改,计算机将显示一条错误消息,对于类类型的参数来说,如果她不会由函数更改,就应该设为传引用调用参数。如果一个成员函数不更改调用他对象的值,就应该在函数申明中添加修饰符const,const要放在函数申明之后,函数定义的开头也应该包含const与函数申明相匹配。
5、陷阱:不一致的使用const
要么全部使用修饰符const,要么根本不要使用,如果为特定类型的一个参数使用了const,那么对于其他所有参数,只要它们具有相同的类型,而且不由函数调用更改,那么也应该使用const。如:
void Guarantee(const Money& price)
{
cout<<price.get_value();
}
如果不为成员函数加上const修饰符,那么大多数编译器可能报错,因为在get_value函数申明中不包含const,编译器就假定调用对象会被修改,所以一旦为Money类型的参数使用了修饰符const,那么针对不会修改调用对象值的所有Money成员函数,都应该使用const,所以在get_value函数的申明中必须包含const。
6、重载操作符
重载操作符+与定义函数add的区别只涉及语法上的变动,对于重载操作符+定义与add函数相似,区别是使用名称+而不是add。而且在重载操作符+之前夫加上关键字operator。如:
class Money
{
public :
friend Money operator +(const Money& amount1,const Money& amount2);
}
Money operator +(const Money& amount1,const Money& amount2)
{
...
}
操作符重载规则:
重载操作符时,最终重载的操作符至少要有一个参数属于类类型
重载的操作符可以是一个类的友元,操作符函数可以是一个类的成员,也可以是一个普通的函数
不能新建一个操作符。只能对现有操作符进行重载
不能改变操作符接受参数的数目
不能改变操作符的优先级