试图创建一个驱动程序类型类,其中,下面的Base是在实例化时传递类型的驱动程序。在这种情况下,类型2用于构造正确的派生对象。从基类实例化派生对象
我的编译器在“Class Base”行上抛出了一个Declaration语法错误。
我的最终目标是能够做到这一点:
Base *B;
B = new Base(2);
if(B)
{
B->DoStuff();
B->DoMoreStuff();
delete B;
}
这里是我的代码将无法编译...
class Base
{
public:
Base(int h);
virtual ~Base();
private:
int hType;
Base *hHandle;
};
class Derived1 : public Base
{
public:
Derived1();
virtual ~Derived1();
};
class Derived2 : public Base
{
public:
Derived2();
virtual ~Derived2();
};
Base::Base(int h)
{
hType = h;
switch(h)
{
case 1:
hHandle = new Derived1;
break;
case 2:
hHandle = new Derived2;
break;
}
}
Derived1::Derived1():Base(1)
{
printf("\nDerived1 Initialized\n\n");
}
Derived2::Derived2():Base(2)
{
printf("\nDerived2 Initialized\n\n");
}
下面是更新后的代码,以显示完整的源代码。我想我现在明白为什么它不会编译。正如下面指出的,我有一个无限循环呼叫'新'
#include <stdio.h>
class Base
{
public:
Base();
Base(int h);
Create (int h);
virtual ~Base();
private:
int hType;
Base *hHandle;
};
class Derived1 : public Base
{
public:
Derived1();
virtual ~Derived1();
};
class Derived2 : public Base
{
public:
Derived2();
virtual ~Derived2();
};
Base::Base()
{
}
Base::Base(int h)
{
Create(h);
}
Base::Create(int h)
{
hType = h;
switch(h)
{
case 1:
hHandle = new Derived1;
break;
case 2:
hHandle = new Derived2;
break;
}
}
Derived1::Derived1()
{
printf("\nDerived1 Initialized\n\n");
}
Derived2::Derived2()
{
printf("\nDerived2 Initialized\n\n");
}
错误的文字是什么?如果它指的是你的代码片段的第一行,那不*看*错误。 – ssube 2011-04-16 03:19:49
运行时怎么样?当你创建一个Base(1)时,构造函数创建一个新的Derived,它调用它的基类Base(1),它创建一个新的Derived,它调用它的基类... – 2011-04-16 10:48:47
@Eric:请使用'std :: unique_ptr','boost :: scoped_ptr'或'std :: auto_ptr'(后者更糟糕)。你的玩具样品有内存泄漏:/ – 2011-04-16 14:18:36