C++类简单学习(二)

来源:互联网 发布:网络布线按点收费吗 编辑:程序博客网 时间:2024/06/14 06:38

1.使用引用的一个注意事项:如果在一个函数内部定义一个局部变量,想要返回这个变量,那么返回值类型不能定义为引用,因为该局部变量在函数结束时将被删除,不能引用一个不存在的对象。
2.运算符重载的注意事项:
1)重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。
2)左侧的操作数为调用对象。
3)大多数运算符都可以通过成员或者非成员函数进行重载。而非成员函数怎么获取访问私有成员的资格,通过友元函数来实现。
A=B*2.75;(成员函数)
A=2.75*B;(非成员函数,带两个以及两个以上的参数)。
3.友元
1)友元函数:
创建友元函数的第一步是将原型放入类声明中,并在原型声明前加上关键词 friend:
friend Time operator*(double m, const Time & t);
虽然它在类声明中声明,但不属于成员函数,不能用成员运算符进行调用。但是访问权限同成员函数。
定义时,不用使用限定符,也不用在前面加上friend,类似于普通函数定义。
总之,类的友元函数是非成员函数,访问权限与成员函数相同。
运用友元函数的一个小技巧,如果为类重载运算符,并将非类的项作为其第一个操作数,则可以用友元函数来反转操作数的顺序。
Time operator*(double m, const Time & t)
{
return t * m;
}
再比如重载<<运算符
void operator<<(ostream & os, const Time & t)
{
os << t.hour << ” hours, ” << t.minutes << ” minutes”;
}
最终版本:
ostream & operator<<(ostream & os, const Time & t)
{
os << t.hour << ” hours, ” << t.minutes << ” minutes”;
return os;
}
2)友元类:
3)友元成员函数:
4.转换函数
1)转换函数必须是类方法。
2)转换函数不能指定返回类型。
3)转换函数不能有参数。
例如:
operator double();typeName(这里为double)指出了要转换成的类型,因此不需要指定返回类型。转换函数是类方法意味着:它需要通过类对象来调用,从而告知函数要转换的值,因此不需要参数。
注意:建议用显示调用防止出错。
5.四舍五入:int(A+0.5);