🥒抽象基类
2022-6-10
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 

纯虚函数

纯虚函数在虚函数的后面加上了=0
 

抽象类

基类中添加了至少一个纯虚函数的基类称为抽象类。
设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。如果override是直接要求你重写,那设计成抽象类就是间接要求你重写。
Disc_quote 类是通用的打折书的概念,而不是具体的策略。所以,应当阻止用户实例化此类的对象。通过将 net_price 定义为纯虚函数来实现这个设计目标,并且明确告知 net_price 函数没有任何含义。
在函数参数列表后,分号前写上= 0来表明一个虚函数是纯虚函数,= 0只能出现在类体内的虚函数声明处:
尽管Disc_quote不能被直接创建对象,其派生类的构造函数依然需要使用Disc_quote的构造函数来构建Disc_quote类部分。值得一提的是,可以给纯虚函数提供一个定义,然而,函数体必须在类外进行定义,不能类内给一个纯虚函数提供定义。
从抽象基类继承的派生类必须定义所有纯虚函数,否则派生类也是抽象的。
 
派生类构造函数只能初始化其直接基类
此版本中的Bulk_quote有一个直接基类 Disc_quote,和一个非直接基类Quote,每个Bulk_quote对象有三个子对象:Bulk_quote部分,Disc_quote部分和 Quote 类的子对象。
由于每个类控制本类对象的初始化过程,因而,即便Bulk_quote类没有任何数据成员,它依然需要 4 个构造函数参数。构造函数先调用直接基类Disc_quote 的构造函数进行初始化,这个构造函数先调用它自己的直接基类Quote 的构造函数进行初始化,但Quote的构造函数执行完返回时,Disc_quote构造函数将继续执行,并最终返回到 Bulk_quote 构造函数,这个构造函数没有任何额外的事需要做,直接返回。
 
 
抽象类指针
虽然父类是抽象类不能定义对象,但是可以定义指针。定义指针时如果new父类对象因为是纯虚函数,自然是new不出来的,但是可以new子类对象:
 
 
重构
重构(refactoring)需要重新设计类继承体系,并将操作或数据从一个类移动到另一个类。重构在面向对象编程中十分常见。值得一提的是即便改变了继承层次,使用 Bulk_quoteQuote类的代码将保持不变,但需要重新编译整个代码。
 
  • C++
  • 虚函数和多态访问控制与继承
    目录