operator=

来源:百度知道 编辑:UC知道 时间:2024/06/18 18:54:12
#include "stdafx.h"
#include <iostream>
using namespace std;
class date
{
public:
date(int oa=1):a(oa){}
int a;
};
date &operator=(date &d1,date d2)
{
d1.a=d2.a;
return d1;
}
/*
这里,我不想把operator=写作class date的成员,但却出现了错误
*/
int _tmain(int argc, _TCHAR* argv[])
{
date d1,d2(7);
d1=d2;
cout<<d1.a;
return 0;
}

/*operator equal.cpp(14) : error C2801: “operator =”必须是非静态成员
但是我把date &operator=(date &d1,date d2)改成
date &operator==(date &d1,date d2)
却是正确的,“=”与“==”是不是有什么微妙的差别啊?
*/

看第3条:

基本规则
1.一元操作符可以是不带参数的成员函数[1]或带一个参数的非成员函数[1]。
2.二元操作符可以是带一个参数的成员函数[1]或带两个参数的非成员函数[1]。
3.operator=、operator[]、operator()、operator->只能定义为成员函数[1]。
4.operator->的返回值必须是一个指针或能使用->的对象。
5.重载 operator++ 和 operator-- 时带一个 int 参数表示后缀,不带参数表示前缀。
6.除 operator new 和 operator delete 外,重载的操作符参数中至少要有一个非内建数据类型。
7.x@y 搜索范围为:x 成员函数--> 全局函数/X所在名字空间中的函数/Y所在名字空间中的函数/X的友元函
数/Y的友元函数。
8.重载的的操作符应尽量模拟操作符对内建类型的行为。

有差别,而且差别很大。
“=”是赋值运算,将后面的值赋给前面;
“==”才是我们日常生活中所说的相等。

“=”与“==”是不是有什么微妙的差别啊?

一个是赋值,一个是比较判断,差远了