C++ 在派生类中更改成员类型

标签 c++ inheritance overloading

我有一个类 Base1,它包含一个不同类 Base2 的对象数组。我想要一个派生类 Derived1,它继承了 Base1 的所有内容,除了数组是 Derived2 类型(它是 Base2 的派生类)。例如,像这样:

class Base2{
        int a2;
};

class Derived2: public Base2{
        int b2;
};

class Base1{
        Base2* list;
};

class Derived1: public Base1{
        Derived2* list;
};

我的理解是,在上面的示例中,Derived1 的对象实际上有两个数组:

list

Base1::list

我不想要。

想法是 Base1 的所有功能仍然适用于 Derived1 对象,因为 Derived2"is"Base2。这真的很脏,但我想我可以在 Derived1 构造函数中删除 [] Base1::list 数组。

有人看到这个问题的解决方案吗?这似乎是经常发生的事情,我不敢相信不存在简单的解决方案。使用模板有用吗?我的想法是否定的,因为 Base1 和 Derived1 中的所有功能都需要知道它们分别处理 Base2 和 Derived2 对象。

最佳答案

当有人将 Derived1 类向下转换为 Base1 时,您预计会发生什么?当你破坏基类后使用 list 时它会崩溃。最好的办法是继续使用基类的 list,并确保只有 Derived2 类型的对象被放入列表中。如果无法从外部修改列表的内容,那将是可行且安全的。

是的,我知道关于这个还有很多要说的,但让我们一步一步来吧。

关于C++ 在派生类中更改成员类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6512826/

相关文章:

c++ - 递归地从链表中删除数据

c++ - 在使用 boost::asio 和 boost::iostreams(或其他东西?)进行异步非阻塞文件加载方面需要帮助

c++ - c++中的模糊函数

python - 动态重载运算符

java - 访问子类中的私有(private)字段

c++ - 重载运算符 >> 和 << 以便它接受用户定义的对象

c++ - cBlas 性能 + 速度

c++ - 将字符串转换为三个整数?

scala - 如何从Scala中的内部类引用外部对象

c# - C#或者底层的CLR真的不支持多重继承吗?