2011-04-18 229 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的一個實例,它是一個抽象的,這是不可能創建一個抽象類的實例。但是,我們可以使用抽象類的指針來指向它的驅動器類以利用多態性的優勢。 。 。