【面向对象程序设计常见面试题】虚函数是怎么实现的?(已阅)
2014-03-28 00:19
411 查看
简单说来使用了虚函数表.
虚函数的作用是实现动态联编,(联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联
编。)也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数
重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口。
注意以下程序的输出结果:
1、无虚函数,即静态编译,故只能根据指针的声明类型来选择函数
2、虚函数,动态编译,可以选择同类族中不同类的虚函数
虚函数的作用是实现动态联编,(联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联
编。)也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数
重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口。
注意以下程序的输出结果:
1、无虚函数,即静态编译,故只能根据指针的声明类型来选择函数
#include <iostream> using namespace std; class CParent{ private: int a; int b; public: CParent(int x,int y) { a = x; b = y; } ~CParent(){} void show() { cout<<"CParent-----------"<<endl; cout<<a<<" "<<b<<endl; } }; class CChild:public CParent { private: int c; public: CChild(int x,int y, int z):CParent(x,y) { c = z; } void show() { cout<<"CChild-----------"<<endl; cout<<c<<endl; } }; int main() { CParent mp(60,60),*pc; CChild mc(10,20,30); pc = & mp; pc->show(); pc = & mc; pc->show(); }
2、虚函数,动态编译,可以选择同类族中不同类的虚函数
#include <iostream> using namespace std; class CParent{ private: int a; int b; public: CParent(int x,int y) { a = x; b = y; } ~CParent(){} virtual void show() { cout<<"CParent-----------"<<endl; cout<<a<<" "<<b<<endl; } }; class CChild:public CParent { private: int c; public: CChild(int x,int y, int z):CParent(x,y) { c = z; } virtual void show() { cout<<"CChild-----------"<<endl; cout<<c<<endl; } }; int main() { CParent mp(60,60),*pc; CChild mc(10,20,30); pc = & mp; pc->show(); pc = & mc; pc->show(); }
相关文章推荐
- 【面向对象程序设计常见面试题】多继承与虚函数之间的关系(已阅)
- 【面向对象程序设计常见面试题】虚函数的定义的几点说明(已阅)
- 【面向对象程序设计常见面试题】虚析构函数(已阅)
- 【面向对象程序设计常见面试题】类中成员变量怎么进行初始化?(11)
- 【面向对象程序设计常见面试题】多态的作用?(已阅)
- 【面向对象程序设计常见面试题】如何定义和实现一个类的成员函数为回调函数?
- 【面向对象程序设计常见面试题】类的声明和实现的分开的好处?
- 【面向对象程序设计常见面试题】流运算符为什么不能通过类的成员函数重载?一般怎么解决?(7)
- 【面向对象程序设计常见面试题】对对象成员进行初始化的次序是什么?(11)
- 【面向对象程序设计常见面试题】类和对象之间的关系是什么?(11)
- 【面向对象程序设计常见面试题】函数模板与类模板有什么区别?(44)
- 【面向对象程序设计常见面试题】对类的成员的访问属性有什么?(11)
- 【面向对象程序设计常见面试题】派生中构造函数的几点说明(xx)
- 【面向对象程序设计常见面试题】虚基类的几点说明(xx)
- 【面向对象程序设计常见面试题】数组在做函数实参的时候会转变为什么类型?
- 【面向对象程序设计常见面试题】赋值兼容(xx)
- 【面向对象程序设计常见面试题】判断题
- 【面向程序设计常见面试题】纯虚函数和抽象类(已阅)
- 【面向对象程序设计常见面试题】运算符重载的三种方式?(7)
- 【面向对象程序设计常见面试题】赋值运算符和拷贝构造函数的区别与联系?(3)