c++ - 将基类转换为其派生类之一?

标签 c++ class inheritance

有没有捷径可以获取基类并将其转换为程序内部的派生类之一?例如:

假设我有三个类,一个基类和两个派生类:

class cColor {
};

class cBlue : public cColor {
};

class cRed : public cColor {
};

然后我在我的程序中创建了一个 Color 类:

int main(){
cColor unsaturated
return 0;
}

有什么方法可以将 unsaturated 从 cColor 类转换为 cBlue 或 cRed 类?类似的解决方案是将 unsaturated 存储在指针中,从指针创建一个新的 cBlue 或 cRed 类,然后删除 unsaturated 吗?

最佳答案

对象创建后无法改变类型(构造和析构除外,派生类对象暂时变为基类对象)。由于派生类对象可能比它们的基类大,所以这也行不通。

创建新的派生对象、重置指针然后销毁基对象的解决方法在没有其他人持有指向基类的另一个指针的情况下有效。如果有任何其他指向原始对象的指针或引用,它将在之后悬空。但是,如果您控制着该类的唯一指针/引用(例如,如果您仅通过一个从不泄漏指针或对真实对象的引用的单例代理对象访问它),则此方法有效。

关于c++ - 将基类转换为其派生类之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8101425/

相关文章:

c++ - 为什么数据成员在 C++ 中默认是私有(private)的?

python - 在Python中对对象应用函数

php - PHP 中的原型(prototype)继承(类似于 JavaScript)

c++ - 在 xcode 上运行 C++ 程序

c++ - 使用具有继承性的构造函数基类和成员初始值设定项列表

c++ - 如何使用istringstream提取混合格式

c++ - 使用 ios::ate 重写数据

C#:封装例如集合

java - 一种扩展可实例化类并添加值组件同时保留相等契约的方法

c# - 泛型和继承