您的位置:首页 > 职场人生

【面向对象程序设计常见面试题】虚函数是怎么实现的?(已阅)

2014-03-28 00:19 411 查看
简单说来使用了虚函数表.

虚函数的作用是实现动态联编,(联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联

编。)也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数

重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口。

注意以下程序的输出结果:

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐