大一下学期疑难知识总结目录:点击打开链接
1.
不能重载的运算符只有六个,分别是成员访问运算符“.”、成员指针运算符“*”和“->”、作用域运算符“∷”、sizeof运算符和三目运算符“?:”。
2.
运算符重载的规则
只能重载C++预定义中已有的运算符,不可自己“创造”新的运算符进行重载。
重载功能应当与原有功能相类似。
不能改变运算符的操作数的个数;
不能改变运算符原有的优先级;
不能改变原有的结合性;
不能改变运算符对预定义类型数据的操作方式,即至少要有一个操作对象是自定义类型,这样做的目的是防止用户修改基本类型数据的运算性质。
3.
A operator +(A &a) //成员函数重载运算符+
{ A t; t.i=i+a.i; return t; }
a3=a1+a2; 相当于a3=a1.operator+(a2)
Test operator +(Test &t1, Test&t2) //友元函数重载运算符+
{ Test t3;
t3.a=t1.a+t2.a;
return t3;
}
4.
成员函数重载++(前后缀)
class Time
{public:
Time(){minute=0;sec=0;}
Time(intm,int s):minute(m),sec(s){ }
Time operator++( ); //声明前置自增运算符“++”重载函数
Time operator++(int); //声明后置自增运算符“++”重载函数
void display(){cout<<minute<<“minute”<<sec<<“sec”<<endl;}
private:
intminute;
intsec;
};
Time Time∷operator++( ) //定义前置自增运算符“++”重载函数
{ sec++;
if(sec>=60)
{
sec=0; //满60秒进1分钟
++minute;
}
return *this; //返回当前对象值
}
Time Time∷operator++(int) //定义后置自增运算符“++”重载函数
{
Time temp(*this);
sec++;
if(sec>=60)
{
sec=0;
++minute;
}
return temp; //返回的是自加前的对象
}
b) 如何用成员函数重置单目运算符
friend void operator ++(Point &point)//重载前缀++
{++point.x; ++point.y;}
friend Point operator ++(Point&point,int a) //重载后缀++
{
Point p(1,1); //创建任意一个对象
p=point;
++point.x;
++point.y;
returnp;
}
5
c=a+b; 实际上是 c=a.operator+(b);
c=++a; 实际上是 c=operator++(a);
c+=a; 实际上是 c.operator+=(a );
6.
有些运算符不能用友元函数进行重载,它们是:=,(),[ ],->等。
7.
成员函数
AB operator+(int x)
{ ABtemp;
temp.a=a+x;
temp.b=b+x;
returntemp;
}
ob2=ob1+20;
//ob2=30+ob1;这种情况下,系统预定义的数据类型不能出现在运算符的左边
友元函数
friend AB operator+(AB ob,int x);
friend AB operator+(int x,AB ob);
AB operator +(AB ob,int x){
AB temp;
temp.a=ob.a+x; temp.b=ob.b+x; return temp;}
AB operator +(int x, AB ob){
AB temp;
temp.a=ob.a+x; temp.b=ob.b+x; return temp;}
7.输入输出不能被重载为成员函数!!!