class A { public:
booloperator==( const A& ) { Print(__FUNCTION__); return true; }
};
class B {};
voidOnStart()
{
bool res;
A *a1, *a2;
B *b1, *b2;
res = a1 == a2; //сейчас сравниваются указатели //предлагается вызывать operator==()
res = b1 == b2; //сравниваются указатели (предложение здесь ничего не меняет, поскольку нет B::operator==)
res = IsEqualPointer( a1, a2 ); //сравниваются указатели
}
顺便说一下,我不明白这段代码,在什么地方会调用operator==? 这只是两个长条的比较,就这样而已
...
IsEqualPointer可以是一个模式,也可以是一个类似于::GetPointer的通用函数。
我完全不明白你的意思,你能用人话解释一下你想做什么吗? 给出的代码有错误(operator==既没有参数,也没有返回值),很难从这些东西中理解到什么。
让我马上告诉你,比较/分配指针的问题以前从未存在过,GetPointer(a)==GetPointer(b)就足够了。 所以这个任务只涉及对象本身的比较/分配,也就是说,无论这些对象是用指针还是引用表示,它都能保证执行这些操作
你给出的代码有错误(operator==没有参数或返回值),很难从这一切中理解什么。
GetPointer(a)==GetPointer(b) 将导致a.operator==( b )
顺便说一下,如何在MQL中引入* 和& 操作符,以便在第一种情况下允许显式访问对象,在第二种情况下获取对象 指针(而不是繁琐的GetPointer)。 星号是必须的,而且语言中没有任何东西可以取代它。没有它,就不可能控制像上面A100所描述的情况,当代替对象本身的一些指针动作被执行时。 就个人而言,这是一个持续的问题,我必须时刻保持警惕,或者到处指定A.operator=(B),A.operator!=(B),即失去了简洁性,重载操作符实际上变得毫无意义。
我曾经提出过这个问题,但这个话题被搁置了。 让我们最后完成这个问题。
我同意这一点,我一定会提出这个问题,我们将讨论这个问题。
为什么会这样呢?
...
如果你把operator==等同于operator<,结果也会一样。
你甚至没有检查你的建议!就像在之前的案例中,当代码中有明显的错误时,也就是说,你甚至没有尝试编译它。 你在曲柄上勾画了一些东西,你的一些想法,如 "趁我善良,吃了它,没有同情心"...是这样吗? 我们不要做这种无意义的事。
我自己经常比较指针和重载运算符,从来没有发生过你现在所梦想的事情。 现在检查了你的代码,没有发生奇迹,运算符==没有按规定执行。
所以现在检查了你的代码,没有奇迹发生,操作者==没有按规定启动。
这句话的重点正是要引发它。
那是干什么的?
反过来说更有意义:<和>应该导致指针的比较。