代码改变世界

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)

{

...

}

操作符重载规则:

重载操作符时,最终重载的操作符至少要有一个参数属于类类型

重载的操作符可以是一个类的友元,操作符函数可以是一个类的成员,也可以是一个普通的函数

不能新建一个操作符。只能对现有操作符进行重载

不能改变操作符接受参数的数目

不能改变操作符的优先级