C++ pure virtual,impure virtual,non-virtual函数关于继承的实际意义

本文探讨了C++中纯虚函数、虚函数和非虚函数在继承中的实际意义。纯虚函数作为抽象类接口,强制派生类实现;虚函数允许派生类覆写,提供默认实现或接口;非虚函数则继承接口并强制实现,但派生类也可覆盖。文章通过示例说明了这些概念在面向对象设计中的应用。
摘要由CSDN通过智能技术生成

区分接口继承和实现继承

本篇主要讨论pure virtual函数(纯虚函数),impure virtual函数(虚函数),以及non-virtual函数(非虚函数)继承中的实际意义.

概念上通过public继承,实际上可以分为函数接口继承(function interfaces)和函数实现继承(funcion implementations).

考虑下面这个例子

class Shape{
   
public:
virtual void draw()const = 0;//pure virtual 
virtual void error(const std::string& msg);//virtual
int objectID()const;//non-virtual
...
};
class Rectangle:public Shape{
   ...};
class Ellipse:public Shape{
   ...};

首先来看pure virtual函数:
Shape定义了一个纯虚函数,所以它是一个抽象类,客户不能创建抽象类的实体,只能创建其派生类(derived classes)的实体.
成员函数的接口总会被继承,Shape的派生类都必须在其内部对这个接口(draw)进行实现.(属于指定接口继承)
这里语法上是可以对Shape的pure virtual函数进行定义的,虽然基类无法创建对象使用,但派生类作用域包含基类,可以通过基类显示利用作用域运算符(::)调用其基类部分使用(看似鸡肋但部分情况下有用,后面详述)。

接下来看impure virtual函数,根据语法,任何派生类继承基类的虚函数,无论是否给与virtual关键字显示指出,其都将拥有虚属性.这里的实际意义在于.你可以自己覆写(override)一个error函数版本,也可以不覆写,默认使用基类提供的缺省版本.(属于指定接口继承&缺省实现继承)
以下面的例子解释一下:

class Airport{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值