C++primer学习:面象对象程序设计(1):定义基类和派生类

本文探讨了C++中的面向对象编程,重点关注继承、虚函数和protected关键字的应用。通过创建Quote类作为基类,讨论了如何设计派生类以实现有限数量折扣的功能,并介绍如何利用动态绑定实现不同类的函数调用。此外,还提出了一个练习,即为Quote类体系定义一个debug虚函数,以显示类的成员信息。
摘要由CSDN通过智能技术生成

通过继承将基类和派生类联系在一起.新出现的知识点有虚函数,protected关键字,动态绑定.

[练习]:定义Quote类,保存书的信息.作为一个基类,后续将会定义其他派生类(保存打折书籍的信息),以及一个打印书信息的函数(通过动态绑定来判断调用那种类的函数).

class Quote
{
public:
    Quote() = default;//默认构造函数
    Quote(const string& s, const double Sales_price) :bookNo(s), price(Sales_price){}//构造函数
    virtual double net_price(size_t  n)const{ return price*n; }//虚汗函数,定义实际价格
    string isbn()const{ return bookNo; }
    virtual ~Quote(){}//virtual 析构函数

private:
    string bookNo;

protected:
    double price;
};

double print_total(ostream& os,Quote& sales, size_t n)
{
    auto ret = sales.net_price(n);
    os << "ISBN: " << sales.isbn() << " solds: " << n << " total due: " << ret << endl;
    return ret;
}

======================================================================================

定义的派生类:从Quote处继承,包含打折信息

class Bulk_quote :public Quote//从Quote继承
{
public:
    /*****************定义派生类自己的***********************/
    Bulk_quote() = default;//默认构造函数
    Bulk_quote(const string& s, const double Sales_price,size_t cnt, double disc) :
        Quote(s,Sales_price),min_qty(cnt),discount(disc){}
    double net_price(size_t) const override;//覆盖了基类的虚函数

private:
    size_t min_qty;//适用折扣政策的最低购买量.
    double discount;//折扣额
};
double Bulk_quote::net_price(size_t cnt) const
{
    if (cnt >= min_qty)
        return (1 - discount)*cnt*price;
    else
        return cnt*price;
}

======================================================================================

定义一个类使其享受数量受限的折扣,当购买数量超过一个给定的限量享受折扣.否则超出的部分将以原价销售.

class Limit_quote : public Quote//从派生类继承
{

public:
    Limit_quote() = default;
    Limit_quote(const string& s, const double Sales_price, size_t cnt, double disc):
        Quote(s, Sales_price), limit_qty(cnt), discount(disc){}
        /*****覆盖原来的虚函数*********/
    double net_price(size_t n) const override{
        return price*(n - discount * ( n > limit_qty ? limit_qty:n));
    }
private:
    int limit_qty;
    double discount;
};
double print_total(ostream& os,const Quote& sales, size_t n)
{
    auto ret = sales.net_price(n);
    os << "ISBN: " << sales.isbn() << " solds: " << n << " total due: " << ret << endl;
    return ret;
}
//测试部分
int main()
{
    Quote x("pyb", 15);
    Bulk_quote y("pyb", 15, 100, 0.3);
    Limit_quote z("pyb", 15, 100, 0.5);
    print_total(cout, y, 200); 
    print_total(cout,x, 200);
    print_total(cout,z,200);
    return 0;
}

===========================================

[练习]:为Quote类体系定义debug虚函数,显示自己成员.注意使用::作用符可以规避虚函数的覆盖,强制调用某个特定版本

virtual void debug()const{
        cout << "ISBN: " << isbn() << " single price: " << price << endl; }//显示成员
 void debug()const override{
         Quote::debug();
        cout <<" min_quantity: "    <<min_qty<<"discount: "<<discount<<endl;
    }

void debug()const override{
    Quote::debug();
        cout<<" Limit_quantity: "<< limit_qty << " discount: " << discount << endl;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值