一:重载运算符
在C语言当中遇到有很多的运算符,如=,>,<,+=等等。
如果我们用==对两个对象进行判断是否相等,系统就不乐意了,它不知道怎么样去判断两个对象是否相等?
比如,我定义了一个类,
class A
{
public:
int a;
int b;
}
A obj1;
A obj2;
if(obj1 == obj2) //错误,系统判断不了
{
}
原因分析:系统遇到两个对象之间的判断时,系统该怎么判断两个对象是否相等呢?在这里,比如说是当obj1.a等于obj2.a时就判断两个对象相等还是判断它们各自两个成员变量相等时,这两个对象才相等?如果系统有更复杂的成员,比如指针或者一个类,那么系统就懵逼了,系统不知道你要在什么样的条件下,才能判断两个对象是否相等。
那就没有办法判断两个对象是否相等了吗?当然有办法。
所以引出了重载运算符这个概念,它有例如+,-,==,=等的重载运算符。
拿==来说,只要我们在这里规定某些规则就可以判断两个对象是否相等,例如它的两个成员之间的值相等时,我们可以判断两个对象相等之类的。
在这里就是说,我们可以只判断obj1.a等于obj2.a时就判断obj1等于obj2,而不用去理其它成员变量是否相等。
重载运算符可以理解为一个函数,在函数里我们写上与这个重载运算符有关的东西,
一般用 operator+重载运算符构成函数名,例如time& operator=(const time& tmp){ }就构成了一个赋值运算符重载
函数类型是time& ,operator=可以理解成函数名,还有后面的形参列表。
二:拷贝赋值运算符
对象之间的赋值 = 操作,这种运算符系统是默认提供的,像==运算符,系统就没有默认的提供了。
time time1;
time time2=time1;//这种调用的是拷贝构造函数
如果是 time2=time1; 这种赋值方式,调用的是赋值重载函数。(前提是自己定义有)
如果自己定义有,那么有可能time1对象里有些成员变量的值和time2对象里有些成员变量的值不一样。
例如:
class A
{
public:
int a;
int b;
int c;
public:
//类里的赋值运算符声明
A& operator=(const A& temp);//拷贝赋值运算符
};
//类外的赋值运算符定义
A& A::operator=(const A& temp)
{
//里面的具体赋值操作由我们自己写
a = temp.a;
b = temp.b;
c = temp.c;
}
后面,就可以执行类似于
A a;
A b;
b=a;//调用拷贝赋值运算符
的操作了。
当然,如果想禁止使用拷贝赋值运算符,可以用private修饰。
重载运算符,拷贝赋值运算符
最新推荐文章于 2024-04-25 18:40:56 发布