C++ 抽象基类

C++ 抽象基类

一、简介

抽象基类: abstract base class,简称ABC,只定义接口,而不涉及实现,主要用于定义派生类的通用接口。抽象基类必须包含至少一个纯虚方法。且包含纯虚函数的抽象基类,不能用来创建对象,只能用作基类。

纯虚方法: 在函数声明的结尾处添加 =0,以表示此函数为纯虚函数。在当前类可不用给出实现。举例声明方式如下:

// 纯虚函数
virtual void functionname() = 0;

二、举例说明

比方说有A、B两个类,最初的设计思想是B类继承A类,但是实际使用过程中发现,A类的许多特性对B类是没有实际意义的,但是A类与B类确实有一定的共同特性。这种情况下我们可以采用抽象基类的方式进行设计。

即从A类与B类抽象出这两个类具有的共同特性,并将这些特性放到一个**ABC(抽象基类)**中,然后再从这个ABC派生出A类与B类。这样就可以使用抽象基类指针同时管理A类与B类对象,可以使用多态方法。

三、实际应用说明

在函数原型中使用=0指出类是一个抽象基类,但在类中可以不定义该函数。但C++可以允许纯虚函数有定义实现。下面以Brass与BrassPlus类使用进行说明,Brass与BrassPlus类是从抽象基类派生出的派生类,向Circle与Ellipse类有时被称具体类,表示可以创建Brass与BrassPlus类对象。

总之,ABC(抽象基类)描述的是至少使用一个纯虚函数的接口,从ABC(抽象基类)派生出的类将根据派生类的具体特征,使用常规虚函数来实现这种接口。

(1)下面示例是ABC(抽象基类)、Brass派生类、BrassPlus派生类具体声明

// AcctABC抽象基类
class AcctABC
{
private:
    std::string fullname;
    long acctnum;
    double balance;

protected:
    struct Formatting
    {
        std::ios_base::fmtflags flag;
        std::streamsize pr;
    };
    const std::string &FullName() const;
    long AcctNum() const;
    Formatting SetFormat() const;
    void Restore(Formatting &f) const;

public:
    AcctABC(const std::string& s = "Nullbody", long an = -1, double bal = 0.0);
    virtual ~AcctABC();

    void Deposit(double amt);
    double Balance() const ;
    // Withdraw 纯虚函数
    virtual void Withdraw(double amt) = 0;
    // ViewAcct 纯虚函数
    virtual void ViewAcct() const = 0;
};

Brass派生类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值