gpt4 book ai didi

c++ - 我应该在 C++ 的派生类中继承嵌套类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:56 28 4
gpt4 key购买 nike

我可以(编辑:应该)做这样的事情吗?

编辑:

我将尝试询问一个可能更适合此继承方案的示例。请注意,这不是 worker 类(Class),只是为了概念。

template<typename T>
class Tree {
protected:
class Node {
Node* _parent;
T _data
};
};

template<typename T>
class BinaryTree: public Tree {
private:
class BinaryNode: public Tree<T>::Node {
Node *_left, *_right;
};
};

最佳答案

这种构建并行类层次结构的方式并不少见。但是,更常见的做法是将嵌套派生类隐藏为应封装的实现细节,即示例中的 BiIterator 将位于 private: 部分。

但是,Iterator 不是一个很好的例子,因为对象切片:即使 BiIterator 保持公开,这个看似无辜的代码是不正确的:

BidirectionalList biList;
// This would slice off BiIterator's functionality
Iterator iter(biList.get_iterator());
while (iter.has_next()) {
...
}

一个更好的例子是,如果基类成员函数采用一个引用或指针指向在基类中定义的嵌套类的对象,并且派生类将为其传递其派生嵌套类:

class Task {
public:
class Worker {
public virtual void work()=0;
}
void run(Worker& w);
};
class SpecialTask : public Task {
private:
class SpecialWorker : public Worker {
public virtual void work() {
...
}
};
public:
void do_something() {
SpecialWorker w;
run(w); // Passes SpecialWorker to run() of base class
}
};

关于c++ - 我应该在 C++ 的派生类中继承嵌套类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27015340/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com