【编程经验】【编程习惯】虚类无法被实例化

来源:互联网 发布:语音播报软件 编辑:程序博客网 时间:2024/06/06 20:30

VS编译报错

error C2259: 'ca' : cannot instantiate abstract classc:\users\administrator\documents\visual studio 2010\projects\test1\test1\main.cpp 处理


#include <stdio.h>#include <iostream>using namespace std;class ca{public:ca(){}virtual ~ca(){}virtual void func1() = 0;//父类,有虚函数,则无法被实例化(无法被new出一个对象来)};class ca_1:ca{public:ca_1(){}virtual ~ca_1(){}//virtual void func1() = 0;//不实现父类的虚函数,编译会报错!};class ca_2:ca{public:ca_2(){}virtual ~ca_2(){}virtual void func1() = 0;//写出来,但依然没写父类虚函数的实现,编译会报错!};class ca_3:ca{public:ca_3(){}virtual ~ca_3(){}void func1()//写出了父类的虚函数实现,编译通过!{}};int main(){//ca* ctest= new ca;//报错!//ca_1* ctest1 = new ca_1;//报错!//ca_2* ctest2 = new ca_2;//报错!//ca_3* ctest3 = new ca_3;//通过!return 1;}


含有虚函数的类是虚类,虚函数用关键字virtual声明。虚函数表明只有在程序使用到该函数时,才获得与调用对象对应的该函数的实现。


类要想被实例化,则类里面的虚函数都要写实现!!!


养成好习惯

1.写类的时候,立马就把public: 构造函数 析构函数(写成虚的)继承关系 以及纯虚函数声明好


2.写子类的时候,若子类还有子类,则可以不实现虚函数。但是若再没有子类了,就一定要把所有的虚函数实现都写上。




0 0
原创粉丝点击