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

用户名

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

但是,代码无法执行此操作。

#include <iostream>

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";
    }
};

class Vector2d : public Point2d {
public:
    Vector2d():Point2d(){
    }
    Vector2d(double x, double y) : Point2d(x,y) {       
    }
    Vector2d(Vector2d const& vec) : Point2d(vec){
    } 
    void Set(double x, double y) {
        Point2d::Point2d(x, y);
    }
};

int main() {
    Vector2d v;
    v.Set(20, -39);
    v.Show(); // prints '(0,0)' instead of '(20,-39)'
}

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

神经元

恐怕您的代码甚至无法在

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();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

构造函数为什么不设置参数?

为什么不隐式调用基类的复制构造函数?

为什么在基类构造函数中看不到派生类属性值?

为什么基类的成员不保留构造函数中首次初始化的值?

为什么流程首先不进入基类构造函数?

为什么必须调用基类构造函数?

为什么不调用基类2的构造函数?

为什么原始的卷曲构造函数{}不返回右值?

在基类构造函数中设置时,为什么重写的get-only属性保持为null?

为什么内联用户提供的构造函数odr使用基类构造函数?

为什么为派生类定义副本构造函数要求定义基类的默认构造函数?

为什么派生类可以调用基类构造函数两次?

为什么派生类的构造函数要在C ++中初始化虚拟基类?

为什么派生类需要使用基类构造函数

(为什么)在纯虚拟派生类中是否需要虚拟基类构造函数调用?

为什么派生模板类的函数不覆盖非模板基类的纯虚函数?

为什么@TupleConstructor不生成构造函数

Dlang:为什么不构造函数?

为什么不直接使用构造函数?

什么是基类构造函数,为什么要使用它?(带有示例)

调用基类构造函数而不命名其类

为什么设置()构造函数比列表慢()

为什么需要设置原型构造函数?

删除复制构造函数时,为什么重载决议不会返回到参考基类的构造函数?

为什么私有基类构造函数导致“隐式超级构造函数不可见”

为什么使用声明的继承构造函数不使用默认构造函数初始化虚拟基类?

为什么BigDecimal的值与构造函数中提供的值不匹配?

当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?

为什么在flutter中使用provider时不执行类的构造函数?