纯虚函数

编辑本段一、定义

虚函数是一种特殊的虚函数,它的一般格式如下:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
};
在许多情况下,在 基类中不能对 虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的 派生类去做。这就是纯 虚函数的作用。
虚函数可以让类先具有一个操作名称,而没有操作内容,让 派生类在继承时再去具体地给出定义。凡是含有纯 虚函数的类叫做 抽象类。这种类不能声明对象,只是作为 基类派生类服务。除非在 派生类中完全实现 基类中所有的的纯 虚函数,否则,派生类也变成了 抽象类,不能实例化对象。

编辑本段二、引入原因

1、为了方便使用 多态特性,我们常常需要在 基类中定义 虚拟函数
2、在很多情况下, 基类本身生成对象是不合情理的。例如,动物作为一个 基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
为了解决上述问题,引入了纯 虚函数的概念,将函数定义为纯 虚函数(方法:virtual ReturnType Function()= 0;)。若要使 派生类为非 抽象类,则 编译器要求在派生类中,必须对纯 虚函数予以重写以实现 多态性。同时含有纯 虚函数的类称为 抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

编辑本段三、相似概念

1、 多态性
指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种 多态性:编译时 多态性运行时多态性
a.编译时多态性:通过 重载函数实现
运行时多态性:通过 虚函数实现。
2、 虚函数
虚函数是在 基类中被声明为virtual,并在 派生类中重新定义的成员函数,可实现成员函数的动态 重载
3、 抽象类
包含纯 虚函数的类称为 抽象类。由于 抽象类包含了没有定义的纯 虚函数,所以不能定义抽象类的对象。
程序举例:
class A
{
public:
A();
virtual ~A();
void f1();
virtual void f2();
virtual void f3()=0;
};
子类:
class B : public A
{
public:
B();
virtual ~B();
void f1();
virtual void f2();
virtual void f3();
};
int main(int argc, char* argv[])
{
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
对象.(调用 派生类的f2())
f3()与f2()一样,只是在 基类中不需要写函数实现.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值