如何从父类创建方法使用不同的变量?

时间:2015-06-08 13:08:34

标签: c++ inheritance

我有一个这样的课程:

class A {
protected:
    class Node {
    public:
        int x;
        Node* next;
    };

    Node* root;
    .
    .
    .
};

很多方法都使用了这个" root"。

现在,假设我想继承A类,并使所有方法都使用"更好"节点。类似的东西:

class B : public A{
    class NewNode : public A::Node{
    public:
        int y;
    };

    NewNode* root;
    .
    .
    .
};

有没有办法做这样的事情?如果没有,除了重写A类之外还有哪些替代方案?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果A是抽象的,则可以独立于任何派生类来编译和使用它的所有方法。因此,访问此变量的代码将已生成且无法更改。我认为如果不修改A,就没有办法做你想做的事。

虽然,这取决于一点,你究竟是什么意思。如果NewNode派生自Node并且Node具有虚函数,则A当然会调用NewNode的方法。如果您不希望从Node派生NewNode,您可能必须使A成为模板类。如果A直接访问Node的成员,而不是使用虚拟Getter / Setter-Functions,这也可以。

答案 1 :(得分:0)

由于NewNode派生自Node,您可以在B构造函数中添加类似的内容

delete root;  //remove the Node
root = new NewNode();  //and put in the better one

更现实地说,你可能需要这样的东西

Node * oldRoot = root;
root = new NewNode(oldRoot);
delete oldRoot;

您不需要在B中使用新变量,只需使用A::root