关于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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值