我有一个带有嵌套类Inner_vector的类A,
class A:
{
public:
class Inner_vector:public Vector
{
bool append(const class Element& element);
};
};
bool A::Inner_vector::append(const class Element& element)
{
add(element);
}
现在我想从A派生一个子类,并自定义内部类“Inner_vector”的“append”和“delete”方法(主要是添加一个新操作),以便调用自定义操作。我怎么能这样做?我是否还应该在A :: Inner_vector中从Child_A中派生一个新的嵌套类,如下面的代码
class Child_A: public A
{
public:
class Inner_Child_vector : public A::Inner_vector
{
bool append(const class Element& element);
};
};
bool Child_A::Inner_Child_vector::append(const class Element& element)
{
A::Inner_vector::append();
my_new_operation();
}
或者我不需要从A :: Inner_vector派生并直接重写它?
我非常感谢任何帮助和评论。
答案 0 :(得分:6)
在C ++中,除了作用域之外,内部类与包含它们的类无关。所以你必须在派生类中派生基类的内部类。
答案 1 :(得分:1)
你永远不能为inner_vector创建另一个类,并让它在你的外部类'A'中有一个受保护的成员,然后类'A'可以定义两个附加和删除的虚函数。
这意味着当您继承并创建“Child_A”时,您只需为追加和删除定义一个新行为。这将要求您扩展内部向量类,以便为您提供足够的内部访问权限,以便您可以从包含它的类中创建所需的追加和删除行为。
class A
{
public:
virtual bool append( const class Element& element )
{
// your specific A behaviour
}
protected:
// std::vector or your own implementation
std::vector _innerVector;
};
class Derived : public A
{
public:
virtual bool append( const class Element& element )
{
// derived implementation
}
};
如果这是不可能的,那么你必须派生两个类,因为它们是无关的。