不可重载的五个运算符
. :: * ?: sizeof
1 . (点运算符)通常用于去对象的成员,但是->(箭头运算符),是可以重载的
2 :: (域运算符)即类名+域运算符,取成员,不可以重载
3 .* (点星运算符,)不可以重载,成员指针运算符".*,即成员是指针类型
4 ?: (条件运算符)不可以重载
5 sizeof 不可以重载
运算符重载
本质就是重载方法,因为运算符不能直接识别复杂类型,当运算符操作复杂类型时会调用operator运算符方法
PS:运算符可以直接操作基本类型,但不能直接操作复杂类型
PS:重载运算符时,不能改变其结果性质,否则失去意义
PS:先写出调用函数/方法,通过调用函数的方法来推导出原型
重载><
成员方法:
class 类
{
bool operator>(Time& t)
};
全局方法:
bool operator==(Time& t1,Time& t2);
重载++ –
前自加/减:先自加,再取值
++t1
class Time
{
Time& operator++()
};
或者:全局函数
Time operator--(Time& t)
后自加/减:先取值,再自加
t1++;
class Time
{
Time operator++(int)
};
或者:全局函数
Time operator--(Time& t,int)
重载<< >>
成员方法:
不能通过类成员方法来重载
cout<<t1; cout.operator<<(Time);
全局方法:
void opeartor<<(ostream&,类名&);
cout
cout的类名: ostream
cin的类名: istream
写在类外,与类友元,类前声明
class A;
ostream& operator<<(ostream&,A&);
class A
{
public:
friend ostream& operator<<(ostream&,A&);
private:
int i;
}
ostream& operator<<(ostream& out,A& a)
{
out<<a.i<<endl;
return out;
}
友元
1、友元函数:若外部函数引用不到某类中成员时(保护和私有),可以将该函数声明为该类的“朋友”。
class 类
{
friend 函数原型;
};
2、友元类: