【发布时间】:2013-01-03 10:04:34
【问题描述】:
我正在编写一个 Line 类来创建数值方法,我想要这些运算符(*、+、-) 使我的代码更具可读性和更易于理解。
#include <vector>
using namespace std;
typedef vector<double> Vector;
class Line : public Vector
{
public:
Line();
~Line();
Line operator+(Line);
Line operator-(Line);
Line operator*(double);
};
Line Line::operator*(double alfa)
{
Line temp;
int n = size();
temp.resize(n);
for (int i = 0; i < n; i++)
{
temp.at(i) = this->at(i)*alfa;
}
return temp;
}
Line Line::operator+(Line line)
{
int n = size();
Line temp;
temp.resize(n);
for (int i = 0; i < n; i++)
{
temp.at(i) = this->at(i) + line[i];
}
return temp;
}
Line Line::operator-(Line line)
{
int n = size();
Line temp;
temp.resize(n);
for (int i = 0; i < n; i++)
{
temp.at(i) = this->at(i) - line[i];
}
return temp;
}
int main()
{
return 0;
}
是否可以从 Vector 类中重载此类运算符?我应该只制作函数(或方法)而不是运算符吗?还有其他建议吗?
ps1:我使用 Visual Studio 11 作为编译器。
ps2:我没有将项目启动为“win32项目”,它是控制台应用程序。
我收到以下错误:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall Line::Line(void)" (??0Line@@QAE@XZ) referenced in function "public: class Line __thiscall Line::operator*(double)" (??DLine@@QAE?AV0@N@Z) C:\Users\Lucas\Documents\Visual Studio 11\Projects\test\test\test.obj test
Error 2 error LNK2019: unresolved external symbol "public: __thiscall Line::~Line(void)" (??1Line@@QAE@XZ) referenced in function "public: class Line __thiscall Line::operator*(double)" (??DLine@@QAE?AV0@N@Z) C:\Users\Lucas\Documents\Visual Studio 11\Projects\test\test\test.obj test
【问题讨论】:
-
从
std::vector继承是一个非常糟糕的主意。此外,您从未定义过您的 ctor/dtor。 -
那我应该只做函数,还是你有别的想法?
-
最好只坚持标准容器的组合。
-
算子没问题,但要使用聚合。
标签: c++ class operator-overloading stdvector