クラス Vector2D の * 演算子をオーバーロードして、次のことができるようにしようとしています。
Vector2D の左側の型、または double の左側の型などを取る演算子がないことに関するエラー メッセージが表示されます。さまざまな * オーバーロードを実装しようとして、何が間違っているのかわかりません。 . 自動型変換用のコンストラクターも追加しました。
#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);
}