可以用一个抽象类定义一个指向该类的指针,但是不能定义或声明对象。
这个中原因就是,定义一个类的对象是,编译器在编译时需要了解类的所有信息以便准确的为要实例化的对象分配内存;由此可见,定义一个类对象是要生成一个类的实例的,而C++规定抽象类是不能实例化的,所以会报出如下错误:
error C2259: 'CBase' : cannot instantiate abstract class
> due to following members:
> 'int CBase::func(int)' : is abstract
public:
virtual int func(int param) = 0;
private:
};
public:
CTestA();
~CTestA();
virtual int func(int param);
private:
int m_value;
};
{
CBase cb0; //定义或声明一个对象,error
CBase *cb = new CTestA(); //定义一个指针,OK
}
但是定义一个指针就不同了,指针是什么?大家都知道,无论它指向的是内部类型还是自己定义的结构体类型还是类的类型变量,它只不过就是一个具有32BIT也就是4个字节内存的空间而已,不需要其他任何信息了,所以能成功定义一个抽象类的指针变量。
class CBase{
class CTestA:public CBase{
int _tmain(int argc, _TCHAR* argv[])
return 0;