抽象类可以作为组合关系的其他具体类的成员吗?C++

Ehs*_*ank 5 c++ abstract-class class composition

P是一个抽象类,我想让它成为A类的成员,这是一个普通的具体类.有可能,如果是的话.关系是作文感谢您的帮助

ald*_*ldo 5

由于P是抽象的,您永远不能创建该类型的对象.但是,您可以将指针存储P为类的成员A; 然后,这个指针成员可以指向(具体)子类的实例P.


Alo*_*ave 2

您不能创建抽象类的任何对象。所以你不能这样做。
\n但是,您可以拥有一个指向抽象类的指针的类成员。

\n\n

这里是一个代码示例来证明这一点:

\n\n
class abstract\n{\n   virtual void somethiing() = 0;\n};\n\nclass concrete\n{\n    abstract obj;\n\n};\nint main()\n{\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

汇编:

\n\n
\n

prog.cpp:8: 错误: 无法将字段 \xe2\x80\x98concrete::obj\xe2\x80\x99 声明为抽象类型 \xe2\x80\x98abstract\xe2\x80\x99 \n prog.cpp:
2 : 注意:因为下面的虚函数在 \xe2\x80\x98abstract\xe2\x80\x99 中是纯虚函数:
\n prog.cpp:3: 注意: virtual void abstract::somethiing()

\n
\n\n

可编译样本:

\n\n
class abstract\n{\n   virtual void somethiing() = 0;\n};\n\nclass concrete\n{\n    abstract *ptr;\n\n};\nint main()\n{\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n