类不能实例化对象?(定义的也不是抽象类)
2017-10-25 17:10
309 查看
最近在写程序遇到一个错误:不能实例化抽象类。
![](https://img-blog.csdn.net/20171025164908518?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzMyNDgwMTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这就让我很郁闷了,自己定义类也并非抽象类,怎么还不能实例化对象了呢?
一般来说,具有纯虚函数的类,被称为抽象基类,抽象基类是不能创建抽象类型的对象,而是该类的派生类去进行实例化
如果抽象类的派生类有任何一个纯虚函数没有具体的实现,那么该派生类任然还是一个抽象类,即还是无法进行实例化对象
将抽象类中各个纯虚函数具体实现就OK了。
这就让我很郁闷了,自己定义类也并非抽象类,怎么还不能实例化对象了呢?
抽象类:
在C++中,当一个类中具有一个或多个纯虚函数的时候,这个类就是抽象类,不能进行实例化。
一般来说,具有纯虚函数的类,被称为抽象基类,抽象基类是不能创建抽象类型的对象,而是该类的派生类去进行实例化
如果抽象类的派生类有任何一个纯虚函数没有具体的实现,那么该派生类任然还是一个抽象类,即还是无法进行实例化对象
例如:
#include <iostream> //基类 class A { public: A(); virtual ~A(); virtual void print()const=0; virtual viod Max()const=0; }; //派生类 class B:public A { public: B(); virtual ~B(); //实现了print函数 void print() { } }; int main() { A a; //错误,抽象类无法进行实例化对象 B b; //还是错误,抽象类无法进行实例化对象 return 0; }
将抽象类中各个纯虚函数具体实现就OK了。
#include <iostream> //基类 class A { public: A(); virtual ~A(); virtual void print()const=0; virtual viod Max()const=0; }; //派生类 class B:public A { public: B(); virtual ~B(); //实现了print函数 void print() { } //实现MAX函数 void Max() { } }; int main() { A a; //错误,抽象类无法进行实例化对象 B b; //正确,可以进行实例化 return 0; }
相关文章推荐
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 没有躲过的坑--抽象类不能实例化对象(但是你明明定义的不是抽象类)
- 【中科大洋笔试题】定义一个不能被继承的类,并且只能实例化3个对象。
- 抽象类不能定于对象,但可以用抽象的类定义指针!
- 接口和抽象类不能实例化对象
- 抽象类不能实例化对象
- 用c++编写一个不能被继承的类(但是可以在类外部定义该类的对象)
- 属性“$”的值为 null、未定义或不是 Function 对象
- 属性“$”的值为 null、未定义或不是 Function 对象
- JavaScript中:表达式和语句的区别 —— function和对象直接量 不能匿名定义解惑
- 不能用。。实例化抽象类
- 外部类的静态方法内不能实例化内部类的对象
- 抽象类真的不能实例化么?
- visual studio 设计器 不能实例化 抽象类的几种解决方案
- VS2013打开老版本的VC++6.0遇到错误:“CException”: 不能实例化抽象类
- 黑马程序员-----面对对象之抽象类的定义和使用
- Move-ADObject : 由于对象的父类不是未范例化就是被删除了,所以不能执行操作。
- Ruby 学习三 (类、对象和变量一 类的定义和实例化)
- 定义一个只能在堆上生成对象的类&&定义一个只能在栈上生成对象的类&&定义一个类不能被继承