我有一些类型为A的对象,并且创建了多个A *指针。 指针以几种方式分组,在创建对象之后, 我将指针的多个副本放置在不同的列表(或向量)中。 这些指针是在基本构造函数中生成的。
现在,派生类(在构造函数中)想将其中一个替换为B *,其中B是从A继承的。我看到了执行此更改的两种方法。琐碎的事情是创建B个实例并根据需要替换所有副本中的指针,即实现替换所有副本的Replace(A *,B *)(当然仅适用于子类)。一方面,我认为这很容易出错(如果以后我忘记了一些新的地方)。另一方面,(A )连接到另一个(A )对象,即,替换时也必须更改所有此类连接。 (也许每次更换都要进行数百次更改)。
更干净的方法是将现有(A )的类型更改为(B )。我想通常不能通过类型转换安全地完成它(通常没有新的数据成员,只有重载的,可能是虚拟的成员函数;但是甚至可能出现新的数据成员和函数)。这里有什么限制?
还有其他想法吗?
答案 0 :(得分:1)
如果类具有虚函数,我认为强制转换指针不会解决您的问题。当您调用其中之一时,指向的对象将(通过其v表)“知道”它是A还是B,然后调用适当的函数。您可能应该有一个真正用A(新)B代替A的函数-但这应该相对简单,因为您可以为B创建一个以A作为参数的构造函数!