2013-02-07 29 views
0

我想重载Vector2D类的*运算符,以便我可以执行以下操作: object * double(not working) double * object不工作) 对象*对象(这一个工作正常)重载问题*运算符为double * obj和obj * double

我得到关于如何没有操作符,如左手类型的Vector2D,或左手类型的双等错误消息。我不知道我在做什么错误,试图实现各种*重载。我甚至已经把在一个构造类型的自动转换:

#include <iostream> 
using namespace std; 

struct Vector2D 
{ 
public: 
    // constructors 
    Vector2D(double X=0, double Y=0); 
    Vector2D(double number); 

    // mutators 
    void setX(double X); 
    void setY(double Y); 
    //accessors 
    double getX() const; 
    double getY() const; 

    // overloads * operator for Vector2D * double 
    const Vector2D operator *(const Vector2D& vector2) const; 
    // overloads * operator for Vector2D * Vector2D -- returns dot product 
    double operator *(const Vector2D& vector2); 

private: 
    // vector components 
    double x; 
    double y; 
}; 

// overloads * operator for double * Vector2D 
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2); 

int main() 
{ 
    int x, y; 
    Vector2D vecA, vecB, vecC; 

    cout << "Enter x and y components (separated by a space) for vector A: "; 
    cin >> x >> y; 
    vecA.setX(x); 
    vecA.setY(y); 

    vecB = vecA * 25.0; 
    cout << vecB.getX() << endl << vecB.getY() << endl; 


vecC = 25.0 * vecA; 
cout << vecC.getX() << endl << vecC.getY() << endl; 

    return 0; 
} 

Vector2D::Vector2D(double X, double Y) { 
    x = X; 
    y = Y; 
} 

Vector2D::Vector2D(double number) { 
    x = y = number; 
} 


void Vector2D::setX(double X) { 
    x = X; 
} 

void Vector2D::setY(double Y) { 
    y = Y; 
} 

double Vector2D::getX() const { 
    return x; 
} 

double Vector2D::getY() const { 
    return y; 
} 


const Vector2D Vector2D::operator *(const Vector2D& vector2) const { 
    double newX = x*vector2.x; 
    double newY = y*vector2.y; 
    return Vector2D(newX, newY); 
} 

// Vector2D * Vector2D (returns dot product) 
double Vector2D::operator *(const Vector2D& vector2) { 
    double dotProd = (x*vector2.x) + (y*vector2.y); 

    return dotProd; 
} 

// double * Vector2D 
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2) { 
    double newX = vector1.getX()*vector2.getX(); 
    double newY = vector2.getX()*vector2.getY(); 
    return Vector2D(newX, newY); 
} 
+0

我怀疑我的转换构造函数没有正确地将double转换为对象。我不知道如何做到这一点 – user1824518

回答

2
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2); 

双*矢量这应该是

const Vector2D operator *(double d, const Vector2D& vector2); 

而对于矢量*翻一番应该

+0

嗯,我之前尝试过,但是当我做到这一点时,它不起作用。我一定错过了什么。非常感谢! – user1824518