关于C++ 的 operator

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
}
其实C++ 并不阻止你写很多自己认为正确的代码. 但是 operator = 其实在你的数据 默认的shadow copy 能完成的时候, 重载是没有多的作用的, 只能作为练手而已, 比如类中有指针, 或者数据结构, 该结构需要 deep copy 才能满足条件, 那么就需要重载了, 这个和C# 里面是一样的.  C# 也默认给你shadow copy. 自己需要 deep 的时候去继承接口 IClonable.

在perl里面我还没有遇到这样的问题, 所以就不在这里赘述了.

下面是一个比较好的 关于C++ 的 operator 介绍以及用法的网址:

http://www.adintr.com/program/article/05.oper.html 


版权声明:本文为liaozhen原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。