C++动静态联编和纯虚函数
动、静态联编简单的说,静态联编就是在程序编译时就完成的过程,而动态联编是在程序运行中完成的过程 class CA { public: void CAFun() { cout<<"CA----Fun"< } } CA A; A.CAFun(); //这里就是一个静态联编 静态联编平时使用较多,在C++实现多态时多用动态联编 class CA { public: virtual void Fun() { cout<<"CA----Fun"< } } class CB : public CA { public: void Fun() { cout<<"CB----Fun"< } } class CD :public CA,public CB { public: void Fun() { cout<<"CA----Fun"< } } //这就是一个动态联编 void objFun(CA * src[],int len) { for(int i=0;i { src[i]->Fun(); } } CB B; CD D; CA *A[2]={&B,&D}; objFun(A,2);//调用函数 //这里输出 //CB----Fun //CD----Fun class CA { public: virtual void Fun()=NULL;//纯虚函数 } 上面就是纯虚函数的书写方式,那么它有什么作用呢 纯虚函数的作用是为派生类提供一个统一的接口,当一个基类对虚函数没有一个有意义的实现的时候,可以声明纯虚函数 有纯虚函数存在的类,叫做抽象类,因为它存在纯虚函数,所以必定是作为一个基类,所以也叫做抽象基类,它的纯虚函数的实现在派生类中实现,如果派生类没有给出一个实现,那么这个派生类继续作为一个抽象基类存在 抽象基类的特点 抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象 习惯上,将抽象基类的构造析构属性改为保护 class CA { public: virtual void Fun()=NULL; virtual void Fun(int n)=NULL; } class CB :public CA { public: void Fun() { cout<<"CBFun"< } } class CD :public CB { public: void Fun(int n)//CB中没有对CA中重载的纯虚函数进行实现,在这里实现 { cout<<"CDFun"< } } 抽象基类不能实例化对象,不过可以通过声明指针和引用来指向派生类对象 CA *pA; CB B; pA=&B; pA->Fun(); //这里输出CB的Fun函数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |