C ++运算符使用指向类的指针重载

时间:2015-01-19 17:50:40

标签: c++ class pointers operators overloading

这是我的班级:

class B : public A{
private:
double r;


public:
B(){};
B(double x_, double y_, double r_){
    x1 = x_; y1 = y_; r = r_;
};
~B(){};
B operator+(const B&  other)
{
    double result_r = r + other.r;
    return B(x1, y1, result_r);
}
B operator*(const B&  other)
{
    double result_r = this->r * other.r;
    return B(x1, y1, result_r);
}
int operator<(const B&  other){
    if (this->r<other.r)return 1; else return 0;
}
int operator>(const B&  other){
    if (this->r>other.r)return 1; else return 0;
}
};

A类是抽象的,这就是我如何声明B:

A*a = new B(10, 10, 10);
A*b = new B(20, 20, 20);

(a<b)之类的内容确实有效,A*c=a+b;不起作用。 如果我不使用指向A和&lt;的指针,它确实有用。有int作为类型,所以我假设它的东西与重载返回的类型,我jsut无法弄清楚如何做到这一点,还有办法吗?

2 个答案:

答案 0 :(得分:1)

你说:

  

虽然(a<b之类的内容确实有用,但A*c=a+b;不起作用。

(a<b)有效,因为编译器知道如何比较两个指针。它并不意味着它会解决bool B::operator<(const B&)

A*c=a+b;不起作用,因为编译器现在不会添加两个B*个对象。

要使用已定义的运算符重载函数,必须使用B类型的对象,而不是指向B类型对象的指针。

您可以使用以下方法显式调用操作符函数:

B* b1Ptr = new B;
B* b2Ptr = new B;
B b3 = b1Ptr->operator+(*b2Ptr);

但那不是你用

获得的
B b3 = b1Ptr + b2Ptr;

您也可以使用:

B b3 = *b1Ptr + *b2Ptr;

答案 1 :(得分:0)

A* c声明一个指针。 a+b的结果是B类型。因此,编译器会告诉您无法将类型为B的对象分配给指针。你为什么需要指针?

只使用A c = a + b

如果你真的想使用指针,请执行

A tmp = a + b;
A* c = &tmp;

或直接

A* c = new B(a+b);