c++中的抽象类声明
abstract class declarations in c++
假设c++程序中的foo
是抽象 class
,为什么可以声明foo*
类型的变量,而不能声明foo
类型的变量?
因为如果你声明一个foo你必须初始化/实例化它。如果你声明一个*foo,你可以用它来指向从foo继承的类的实例,但不是抽象的(因此可以被实例化)
不能实例化抽象类。以下声明之间存在差异。
// 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();
另外,由于抽象类通常用作父类(基类- ABC),您将其用于多态性
class Abstract {}
class DerivedNonAbstract: public Abstract {}
void CallMe(Abstract* ab) {}
CallMe(new DerivedNonAbstract("WOW!"));
因为指向foo的指针不是foo——它们是完全不同的类型。使类抽象意味着不能创建类类型的对象,而不是不能创建指向该类的指针(或引用)。
因为如果我们声明foo,这意味着我们正在创建一个抽象类foo的实例,而创建一个抽象类的实例是不可能的。但是,我们可以使用抽象类的指针指向它的驱动类,以利用多态性的优势……
相关文章:
- 无法创建抽象类的实例
- 用pybind11包装C++抽象类时出错
- 抽象类错误,请参阅声明" "是抽象的
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 如何在C++中声明抽象类的向量列表?
- 何时在抽象类 cpp 中声明受保护的字段
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 如何在不指定模板类型的情况下声明通用抽象类的对象
- 不能将变量声明为类的抽象
- 抽象类声明
- 显式声明抽象基类
- 我如何在抽象类中声明一个超载的运算符,并在派生的非抽象类中覆盖它
- 我们可以通过在C++中的类中使用关键字“abstract”使所有方法抽象来声明接口类吗
- 是否可以在C++/CLR中实现一个用C#声明的抽象类
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- 无效地使用不完整的类型/前向错误声明.可能误用抽象类?(c++)
- 使用声明实现这个抽象类
- 抽象类和虚方法问题:不能将变量' list '声明为抽象类型' aStack
' aStack - c++中的抽象类声明
- 为什么我应该为C++中的抽象类声明一个虚拟析构函数