继承相同的变量但名称不同

时间:2013-07-24 15:57:04

标签: c++ inheritance

是否有一个优雅的c-way(除了简单地设置一个等于的变量)(双关语)从一个具有与基类不同的名称的类继承变量?在python中有用于别名的as关键字,c ++中有这样的方法吗?

即:

class special_type_of_grid
{
    protected: double** special_grid;
    public: special_type_of_grid();
}
class integrator: protected special_type_of_grid
{
    private: /*grid alias special_grid*/
    public: void integrate(){
        //...
        sum += grid[i][j]*h;
        //...}
}

这样就可以有多种'特殊类型的网格'。

我想这样做的好方法是在构造函数中初始化的指针,但它可以在私有/公共范围内完成吗?

1 个答案:

答案 0 :(得分:0)

C ++没有办法做到这一点。但是,有可能在某种程度上这样做,但它是一种非常糟糕的风格。

class Base {
    int x;
};

class Derived : public Base {
public:
    Derived() : y(x) {
        // ctor code here
    }
private:
    int& y;
};

这个例子说明你可以用C ++做很多奇怪的事情,但如果你认为这是唯一的解决方案而不是你在其他地方设计糟糕的设计。此外,您应该将: y(x)添加到所有Derived ctors。

更好(更多OOP风格)的解决方案是使用getter / setter。

class Derived : public Base {
    int& y() { return x; }
};

甚至更好:

class Derived : public Base {
    int getY() { return x; }
    void setY(int value) { x = value; }
};

然而,这可能会导致读取您的代码的人产生混淆和误解。