C++ 包含在具体类中的抽象类
我有一个类,作为成员,它包含另一个类。第二个类是一个抽象类,由一系列子类中的一个以通常的方式具体化。 我不确定构造全Encompating类的最佳方法,因为当它被构造时,肯定会抛出错误,因为它将尝试构造一个缺少某些方法定义的类。有谁能建议最好的解决办法吗? 干杯 杰克 编辑1:类图:C++ 包含在具体类中的抽象类,c++,oop,constructor,abstract-class,C++,Oop,Constructor,Abstract Class,我有一个类,作为成员,它包含另一个类。第二个类是一个抽象类,由一系列子类中的一个以通常的方式具体化。 我不确定构造全Encompating类的最佳方法,因为当它被构造时,肯定会抛出错误,因为它将尝试构造一个缺少某些方法定义的类。有谁能建议最好的解决办法吗? 干杯 杰克 编辑1:类图: Main Class | ------------------------------------ |
Main Class
|
------------------------------------
| |
Normal Methods/Members Abstract Class member
|
-----------------------------
| |
Concrete Class 1 Concrete Class 2
因此,“主类”是我担心的结构,因为当它被调用时,抽象类成员需要以某种方式具体化,但我不确定如何最好地做到这一点。我不完全确定我是否完全理解您的意思,但在我看来,您可以使用指针或对抽象类的引用,然后用一个具体的类初始化它 差不多
class MainClass
{
class AbstractClass
{
public:
virtual void SomeFunction() = 0;
...
};
class ConcreteClass : public AbstractClass
{
public:
ConcreteClass() {}
void SomeFunction() { ... }
...
};
AbstractClass* pAbstractClass;
public:
MainClass()
: pAbstractClass(new ConcreteClass)
{}
virtual ~MainClass()
{
delete pAbstractPointer;
}
...
void AnotherFunction()
{
pAbstractClass->SomeFunction();
}
};
只需创建从抽象基类继承的任何具体类的实例,并将其分配给指向抽象类的指针。给定一个抽象类
A
和两个应该包含它们的实现B
,C
和enc
,我可以想出两个解决方案:
第一个具有a
的unique\u ptr
,enc
看起来像:
struct enc{
unique_ptr<A> a;
int x;
enc(unique_ptr<A> p): a(std::move(p)), x(0) {
}
};
(假设op需要某种指向enc
中父类的指针或引用)
演示。你能发布你的代码让你的问题更清楚吗?我不能发布代码,因为它太大了。我可以试着画一个小的类结构图,虽然你至少可以发布你的类结构…如果没有一些(简化的)示例代码来重现你的实际错误,那么很难回答这个问题。然而,短语“所有encompasing类”听起来像是一个糟糕的设计。对象应该只实现一个职责。这是继承图还是封装图?还是两者的奇怪组合?请展示一些示例代码(它不一定是实际代码,只是向我们展示您正在做什么或想要做什么的代码)。我认为您应该警告必须在
MainClass
的析构函数中调用delete pAbstractClass
,在使用原始指针的情况下:)@Scis我对你的答案投了赞成票,因为你使用了智能指针谢谢,我很感激^_^
template <class T>
struct enc{
T in; // should be private, I'm just lazy :)
A &a;
int x;
enc(): in(T()), a(in), x(0) {
}
};