【发布时间】:2010-11-03 17:19:52
【问题描述】:
自从我不得不编写 C++ 代码以来已经有一段时间了,我感觉有点愚蠢。我编写的代码类似于,但不完全是,下面的代码:
class Parent
{
...
};
class Child : public Parent
{
...
};
class Factory
{
static Parent GetThing() { Child c; return c; }
};
int main()
{
Parent p = Factory::GetThing();
Child c1 = p; // Fails with "Cannot convert 'Parent' to 'Child'"
Child c2 = (Child)p; // Fails with "Could not find a match for 'TCardReadMessage::TCardReadMessage(TCageMessage)'"
}
我知道这应该很简单,但我不确定我做错了什么。
【问题讨论】:
-
我不明白工厂在做什么。看起来它正在返回一个局部变量。该对象有效吗?
-
@John:它正在返回本地对象的副本。回报是按价值计算的,所以原件之后是否死亡并不重要(当然,它确实如此)。没有错,除了它不适合工厂功能......
-
是的,Factory 类的 GetThing 方法正在返回一个局部变量。这显然不会做我想要的。我应该改用指针。至少根据下面的答案。
标签: c++