C++操作符重载

内容待完善。。。


1. 示例代码

#include <iostream>

class Foo {
public:
    operator double() {
        std::cout << "double()" << std::endl;
        return 5.0;
    }

    operator int() {
        std::cout << "int()" << std::endl;
        return 3;
    }
};

int main()
{
    Foo foo; // calling the implicit ctor
    double d = foo;
    int i = foo;
    //float f = foo; // error C2440

    std::cout << "d:" << d <<std::endl;
    std::cout << "i:" << i <<std::endl;

    return 0;
}

2. 运行效果

double()
int()
d:5
i:3

3. 另一个例子

class XYZ {
public:
    XYZ();
    XYZ(double _x, double _y, double _z):x(_x), y(_y), z(_z){}
    XYZ(const XYZ &a);
    XYZ& operator=(const XYZ& rhs);
    XYZ& operator+=(const XYZ& rhs);

private:
    double x;
    double y;
    double z;

    friend XYZ operator+(XYZ& a, XYZ &b);
};

XYZ::XYZ():x(0), y(0), z(0)
{
}

XYZ::XYZ(const XYZ &a): x(a.x), y(a.y), z(a.z)
{
}

XYZ& XYZ::operator=(const XYZ &rhs)
{
    if (this == &rhs) return *this;

    x = rhs.x;
    y = rhs.y;
    z = rhs.z;

    return *this;
}

XYZ& XYZ::operator+=(const XYZ& rhs)
{
    this->x += rhs.x;
    this->y += rhs.y;
    this->z += rhs.z;

    return *this;
}

XYZ operator+(XYZ& a, XYZ &b)
{
    XYZ temp;

    temp.x = a.x + b.x;
    temp.y = a.y + b.y;
    temp.z = a.z + b.z;

    return temp;
}


int _tmain(int argc, _TCHAR* argv[])
{
    XYZ a(1,2,3);
    
    XYZ b = a;

    XYZ c;
    c = a + b;

    c += a;


	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值