【发布时间】:2010-06-28 22:35:33
【问题描述】:
这是我正在尝试做的(此代码不起作用):
class Base
{
virtual Base *clone() { return new Base(this); }
virtual void ID() { printf("BASE");
};
class Derived : publc Base
{
virtual Base *clone() { return new Derived(this); }
virtual void ID() { printf("DERIVED"); }
}
.
.
Derived d;
Base *bp = &d;
Base *bp2 = bp->clone();
bp2->ID();
我喜欢的是看到“DERIVED”打印出来......我得到的是“BASE”。我是一名长期的 C 程序员,并且在 C++ 方面经验丰富……但我在这方面没有取得任何进展……任何帮助将不胜感激。
【问题讨论】:
-
显示更多代码,特别是在这种情况下每个类的所有构造函数很重要。 (有些可以从你的代码中推断出来,但它有助于从每个人那里获得更正确的答案......)
-
嗯。初始代码有 Base bp = &d。现在改为 Base* bp = &d;
-
与问题无关,但您还需要类上的虚拟析构函数。
-
仍然无法编译,因为没有适合
new Base(this)和new Derived(this)的构造函数 -
可能重复 [我可以将指针传递给超类,但创建子类的副本吗? ](stackoverflow.com/questions/3063534/…)