这里,尝试通过基类构造函数设置x和y的值。
但是,代码无法这样做。
{{1}}
我的目标是重用基类构造函数,并尽可能重载赋值运算符。
答案 0 :(得分:1)
我担心您的代码甚至无法在
编译void Set(double x, double y)
{
Point2d::Point2d(x, y);
}
应该在子类构造函数的成员初始化列表的开头调用基类的构造函数,而不是在成员函数中调用。
你需要的可能是
class Point2d {
public:
double x;
double y;
Point2d() : x(0), y(0) {
}
Point2d(double x, double y) : x(x), y(y) {
}
void Show() {
std::cout << "(" << x << "," << y << ")\n";
}
Point2d& operator=(Point2d const& rhs)
{
this->x = rhs.x;
this->y = rhs.y;
}
};
class Vector2d : public Point2d {
public:
Vector2d():Point2d(){
}
Vector2d(double x, double y) : Point2d(x,y) {
}
Vector2d(Vector2d const& vec) : Point2d(vec){
}
/* also need to be overloaded in the subclass */
Vector2d& operator=(Vector2d const& rhs)
{
Point2d::operator=(rhs);
return *this;
}
void Set(double x, double y) {
*this = Vector2d(x, y);
}
};
int main() {
Vector2d v;
v.Set(20, -39);
v.Show();
}
答案 1 :(得分:0)
好吧,你正在尝试在setter函数中构造基类,但是在构造派生类时已经构造了基类。我只想在setter中设置基类的x和y值。