C++ 的强悍, 自然是不言而喻, 在这边写很多的大型程序也用, 这几天我测试了一下C++ 和 perl 的IO 速度, 其实差不多, 可能是由于 perl 里面写起来简单, 而且用 正则 非常顺手, 所以处理文本更多的使用perl, 但是对于数据结构的构建, 则不是perl 处理起来方便的了, C++ 则刚刚合适. 我和一起的几位同事都有这样的想法, C# 其实只能用来表示表示界面而已, 其实我觉得C# 比 C++写起来简单一些, 而且没有那么多容易出错的地方. 前些天一位同事就由于 C++ 的 operator 的问题, 好久没有解决.
问题是这样的, 她在 operator = 的时候没有写成 this , 而是用了一个 temp 变量
Derived& Derived::operator=(const Derived& rde)
{
if(this == &rde)
return *this; // may be (*this) == rde if needs.
Base::operator=(rde); // if Carrot derived from Barley
... // assignments every memeber of Derived.
return *this; // you must return *this, if not there must be some mistakes happen
}
if(this == &rde)
return *this; // may be (*this) == rde if needs.
Base::operator=(rde); // if Carrot derived from Barley
... // assignments every memeber of Derived.
return *this; // you must return *this, if not there must be some mistakes happen
}
其实C++ 并不阻止你写很多自己认为正确的代码. 但是 operator = 其实在你的数据 默认的shadow copy 能完成的时候, 重载是没有多的作用的, 只能作为练手而已, 比如类中有指针, 或者数据结构, 该结构需要 deep copy 才能满足条件, 那么就需要重载了, 这个和C# 里面是一样的. C# 也默认给你shadow copy. 自己需要 deep 的时候去继承接口 IClonable.
在perl里面我还没有遇到这样的问题, 所以就不在这里赘述了.
下面是一个比较好的 关于C++ 的 operator 介绍以及用法的网址: