本文转自:http://blog.csdn.net/Ocean2006/article/details/5326187
http://blog.csdn.net/winson_jason/article/details/7256878
需要实例化类的虚函数必须有定义,而仅仅定义带有虚函数的类且虚函数没有实现,该类编译是可以通过的!
纯虚函数出现在接口类中,并赋值为0,不要为该函数分配函数地址,从而阻止类的实例化!纯虚函数是没有定义的,如果实现了也不是纯虚函数啦!
一般的成员函数可以只有声明,前提是在应用中不能调用该函数,否则会因找不到定义产生连接错误!
实例化类的虚函数必须有定义,原因如下:有虚函数作为成员函数的类, 它的实例化-对象, 在运行过程分配到的内存不止是它的成员数据, 还有一个指向该类虚函数表(vtable)的指针, 虚函数表中的每个数据项都是一个虚函数的入口地址; 如果一个对象的虚函数只有声明而没有实现, 就会出现这个虚函数表找不到本应作为其数据项之一的某函数的入口地址, 虚函数表在运行前不能装载完成, 所以产生连接错误!
★参考资料★ http://www.ok2002.com/cc/cc/v.asp?r=a2273562170518
//C++ 纯虚函数接口如何定义?使用时应注意什么? /*-- 定义纯虚函数接口:virtual void f()=0; //只是提供接口,实现留给继承类 使用时应注意:子类必须要实现该函数 --*/ #include<iostream> using namespace std; class A { public: virtual void func()=0;//定义纯虚函数接口 }; class B:public A { public: virtual void func()//子类必须要实现该函数 { cout<<"ok2002.com"<<endl; } }; void main() { B rs; rs.func(); }