foo
假設在C++程序的抽象class
,爲什麼可接受聲明foo*
類型的變量,而不是foo
類型的?抽象類聲明在C++
5
A
回答
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的一個實例,它是一個抽象的,這是不可能創建一個抽象類的實例。但是,我們可以使用抽象類的指針來指向它的驅動器類以利用多態性的優勢。 。 。
相關問題
- 1. C++抽象類型聲明
- 2. 抽象類聲明
- 3. 在C++中聲明抽象類
- 4. 抽象類聲明爲final
- 5. 抽象類方法聲明
- 6. 在php中聲明一個抽象類
- 7. 在抽象基類上聲明接口
- 8. 聲明一個抽象類類型
- 9. Java爲抽象類聲明類?
- 10. 抽象聲明節點*用作聲明
- 11. C編程抽象 - typedef外部聲明
- 12. 顯式聲明抽象基類
- 13. 類必須聲明爲抽象或?
- 14. C#抽象類,使用匿名而不是聲明具體類?
- 15. 爲抽象方法聲明抽象類是否強制?
- 16. 類必須聲明爲抽象或實現抽象方法?
- 17. 類必須聲明爲抽象或實現抽象方法toArray
- 18. 用作聲明的抽象聲明'const <匿名類>'
- 19. C++/CLI:如何在C++/CLI中聲明抽象(在C#中)類和方法?
- 20. 抽象接口聲明
- 21. 錯誤:無法將變量'c'聲明爲抽象類型'circle'
- 22. 用於聲明抽象泛型類型變量的C#語法
- 23. C++「無法聲明參數是抽象類型
- 24. C++ - 「不能聲明參數'匿名'爲抽象類型'
- 25. 是否可以在C++/CLR中實現在C#中聲明的抽象類?
- 26. 類必須聲明爲抽象或實現onItemSelected在OnItemSelectedListener中的抽象方法
- 27. 允許在非抽象類中聲明抽象方法的目的是什麼?
- 28. 類聲明在C++
- 29. 在窗體中聲明C#類對象
- 30. c#抽象類
您也可以爲'foo&'等抽象類聲明引用。 – iammilind 2011-04-18 06:37:50
因爲我想操縱一般形狀的對象(因此我需要一個指針或形狀的引用)。但我絕對不希望類型形狀的對象,因爲這是一個抽象,我需要的是正方形或圓形的對象。 – 2011-04-18 06:51:49