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. 在C++中声明抽象类
- 3. 抽象类方法声明
- 4. 在php中声明一个抽象类
- 5. Java为抽象类声明类?
- 6. C编程抽象 - typedef外部声明
- 7. 类必须声明为抽象或?
- 8. C#抽象类,使用匿名而不是声明具体类?
- 9. 类必须声明为抽象或实现抽象方法toArray
- 10. 为抽象方法声明抽象类是否强制?
- 11. 类必须声明为抽象或实现抽象方法?
- 12. C++/CLI:如何在C++/CLI中声明抽象(在C#中)类和方法?
- 13. 错误:无法将变量'c'声明为抽象类型'circle'
- 14. 用于声明抽象泛型类型变量的C#语法
- 15. 是否可以在C++/CLR中实现在C#中声明的抽象类?
- 16. 类必须声明为抽象或实现onItemSelected在OnItemSelectedListener中的抽象方法
- 17. 允许在非抽象类中声明抽象方法的目的是什么?
- 18. 类声明在C++
- 19. 在窗体中声明C#类对象
- 20. c#抽象类
- 21. C++抽象类
- 22. C++类声明
- 23. 如何在Haskell中声明抽象数据容器类型?
- 24. 在抽象类中声明一个方法是可选的
- 25. Angular 2 angular-cli AOT在模块中声明抽象类?
- 26. 需要声明HttpServlet类为抽象类型吗?
- 27. RxAndroid:类必须声明为抽象或实现抽象方法的错误
- 28. 为什么要在C#中声明静态类为密封和抽象?
- 29. C#静态字典在抽象类中声明和初始化.NET 2.0
- 30. 声明对象C#
您也可以为'foo&'等抽象类声明引用。 – iammilind 2011-04-18 06:37:50
因为我想操纵一般形状的对象(因此我需要一个指针或形状的引用)。但我绝对不希望类型形状的对象,因为这是一个抽象,我需要的是正方形或圆形的对象。 – 2011-04-18 06:51:49