16.c/c++程序员面试宝典-虚函数与纯虚函数

16.c/c++程序员面试宝典-虚函数与纯虚函数

虚函数的主要作用是建立抽象模型,从而可以达到方便扩展系统的目的。纯虚函数时指被标明为不具体实现的虚函数,是一种特殊的虚函数。



面试题81  虚函数与纯虚函数的区别***


分析:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的形式为:

virtual 函数返回值类型 虚函数名(形参表)

{

函数体

}


虚函数扩展了派生类对象中隐藏基类函数的概念,当程序处于相似类家族的异构对象集合时,要使用到这些函数。

纯虚函数是一种特殊的虚函数,它的一般格式如下:

class<类名>

{

virtual<类型><函数名>(<参数表>)=0;

}


在很多情况下,基类中不能对虚函数给出有意义的实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。


虚函数和纯虚函数的区别:纯虚函数是虚函数的一个子集,用于抽象类,含有纯虚函数的类就是抽象类,它不能生成对象。


【答案】纯虚函数是虚函数的一个子集。



面试题82  如何使用纯虚函数***


分析:为了方便使用多态特性,编程者常常需要在基类中定义虚拟函数。在很多情况下,基类本身生成对象是不合理的,例如,动物作为一个基类可以派生出猴子、犀牛等子类,但动物本身生成对象明显不合常理。


为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数,则编译器要求在派生类中必须予以重载以实现多态性,同时含有纯虚函数的类称为抽象类,不不能生成对象。这样就很好地解决了上述两个问题。一个纯虚函数使用的示例代码如下:

class A   //定义基类

{

public:

A();

void f1();

virtual void f2();

virtual void f3()=0;

virtual ~A();

};

class B : public A   //定义子类

{

public:

B();

void f1();

void f2();

void f3();

virtual ~B();

};

int main()

{

A *m_j=new B();

m_j->f1();

m_j->f2();

m_j->f3();

delete m_j;

return 0;

}


上述代码中,f1()是一个普通的重载。调用m_j->f1();会去调用A类中的f1,它是在编程者写好代码的时候就定好的。也就是根据它是由A类定义的,这样就调用这个类的函数。f2()是虚函数。调用m_j->f2();会调用m_j到保存的对象中,对应的这个函数,这是由于new的B对象。f3()和f2()一样,只是在基类中不需要写函数实现。


【答案】纯虚函数用来定义没有意义的实现,用于抽象类中需要交给派生类具体实现的方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值