c ++中的抽象类声明

时间:2011-04-18 06:14:57

标签: c++ variables types abstract-class declaration

假设{C}程序中foo抽象 class,为什么声明foo*类型的变量是可接受的,而不是foo类型的变量1}}?

5 个答案:

答案 0 :(得分:14)

因为如果你声明一个foo,你必须初始化/实例化它。如果你声明一个* foo,你可以使用它来指向从foo继承但不是抽象的类的实例(因此可以实例化)

答案 1 :(得分:5)

您无法实例化抽象类。以下声明之间存在差异。

// declares only a pointer, but do not instantiate.
// So this is valid
AbstractClass *foo;

// This actually instantiate the object, so not valid
AbstractClass foo;

// This is also not valid as you are trying to new
AbstractClass *foo = new AbstractClass();

// This is valid as derived concrete class is instantiated
AbstractClass *foo = new DerivedConcreteClass();

答案 2 :(得分:1)

此外,因为抽象类通常用作父类(基类 - ABC),用于多态性

class Abstract {}

class DerivedNonAbstract: public Abstract {}


void CallMe(Abstract* ab) {}


CallMe(new DerivedNonAbstract("WOW!"));

答案 3 :(得分:0)

因为指向foo的指针不是foo - 它们是完全不同的类型。创建类抽象说你不能创建类类型的对象,而不是你不能创建类的指针(或引用)。

答案 4 :(得分:0)

因为如果我们声明foo,我们正在创建一个抽象类foo的实例,并且不可能创建抽象类的实例。但是,我们可以使用抽象类的指针指向其驱动类以利用多态性。 。