2011-04-18 157 views
5

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

+0

您也可以为'foo&'等抽象类声明引用。 – iammilind 2011-04-18 06:37:50

+0

因为我想操纵一般形状的对象(因此我需要一个指针或形状的引用)。但我绝对不希望类型形状的对象,因为这是一个抽象,我需要的是正方形或圆形的对象。 – 2011-04-18 06:51:49

回答

12

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

0

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

1

此外,由于抽象类通常作为家长使用(基类 - 美国广播公司),你使用polymorphisem

class Abstract {} 

class DerivedNonAbstract: public Abstract {} 


void CallMe(Abstract* ab) {} 


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

你不能实例化一个抽象类。以下声明存在差异。

// 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(); 
0

因为如果我们声明富即meanz我们正在创建类Foo的一个实例,它是一个抽象的,这是不可能创建一个抽象类的实例。但是,我们可以使用抽象类的指针来指向它的驱动器类以利用多态性的优势。 。 。