Python 中的 __new__
覆盖允许您使用一个类的构造函数来构造一个完全不同的类的对象。想知道是否有任何方法可以在 C++ 或任何其他语言中实现这一点?编写某个求解软件,最初是用 Python 编写的,然后出于速度原因和结构清晰的原因转移到 Java,并为 Java 提供了一种伪方法来实现这一点,但由于 C++ 更加灵活和通用,也许真正的东西可能成为可能。谢谢考虑
答案 0 :(得分:5)
在调用构造函数之前为对象分配内存。
而且由于 C++ 不是动态类型系统,因此您无法在运行时更改对象的类型。
改用工厂函数。
答案 1 :(得分:0)
直译你想做的事情可能是这样的:
class A {};
class B {};
class C {};
void* create_object(char class_letter) {
switch (class_letter) {
case 'A': return new A;
case 'B': return new B;
case 'C': return new C;
default: return new A;
}
}
每个上过第一堂 C++ 课程(包括通常的建议)的人都知道这肯定会爆炸。为什么?看:你可以这样调用这个函数:
void* ptr = create_object('B');
你得到一个 void*
这不是一件好事,因为现在你有责任将它转换为正确的类型,例如:
B* b_ptr = (B*)ptr; // eww!
同样重要 - 现在你也有责任delete
(糟糕!),这是我们程序员往往忘记的流行事情。
最重要的是,它是可行的 - 一如既往,但很丑。因此,如果您计划在 C++ 中实现它,请使用不同的设计模式。