2013-02-07 28 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