C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)
在Java中定义个接口,之后可以定义不同的类来实现接口,如果有个函数的参数为这个接口的话,就可以对各自的类做出不同的响应。
如:
interface animal { public void info(); } class dog implements animal { public void info() { System.out.println("dog class"); } } class cat implements animal { public void info() { System.out.println("cat class"); } } class func{ public void act(animal a) { a.info(); } } public class test{ public static void main(String []args) { dog d = new dog(); cat c = new cat(); func f = new func(); f.act(d); f.act(c); } }
而在C++中,没有接口的定义,我们可以定义抽象类来实现像Java中的接口功能。
包含纯虚函数的类就是抽象类不能实例化,纯虚函数可以定义为:(本文不考虑函数参数)
virtual type functionname()=0;
如:
#include <iostream> using namespace std; class animal { public: virtual void info()=0; }; class dog:public animal { void info() { cout << "dog class" << endl; } }; class cat:public animal { void info() { cout << "cat class" << endl; } }; void test(animal &a) { a.info(); } int main() { dog d; cat c; test(d); test(c); return 0; }
上述程序实现结果与Java中一样。
接口和抽象类都不能实例化,但是在C++中如果在类中只是声明为虚函数,还是可以进行实例化的,不严格地说,也是可以当做接口来用。
虚函数定义为:
virtual type functionname(){/*函数体定义*/}
#include <iostream> using namespace std; class animal{ public: virtual void info(){ cout<<"animal class."<<endl; } }; class dog:public animal{ public: void info(){ cout<<"dog class."<<endl; } }; class cat:public animal{ public: void info(){ cout<<"cat class."<<endl; } }; void test(animal& a) { a.info(); } int main() { animal a; dog d; cat c; test(a); test(d); test(c); return 0; }
在C++中定义虚函数是在函数前加个virtual关键字,上面例子的结果为:
如果在基类(animal)函数中没有加virtual关键字的话,就会输出:
ps:看了很多东西,试着写点博客,欢迎批评指正,多给点建议。