为什么基类构造函数没有设置值?

时间:2015-08-13 02:05:34

标签: c++ inheritance constructor

这里,尝试通过基类构造函数设置x和y的值。

但是,代码无法这样做。

{{1}}

我的目标是重用基类构造函数,并尽可能重载赋值运算符。

2 个答案:

答案 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值。