美文网首页
C++继承练习4

C++继承练习4

作者: 科学旅行者 | 来源:发表于2016-12-08 09:46 被阅读4次

参考资料:《C++ Primer习题集(第5版)》

目的:练习虚函数的构造。
Quote: 基类,提供基本的购书规则。
Bulk_quote: 派生类,提供不同的购书规则。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

class Quote {
    public:
        Quote() = default;//默认构造函数;
        Quote(const string &book, double sales_price) : bookNo(book), price(sales_price) {}//初始化构造器;
        string isbn() const {
            return bookNo;//返回书籍的ISBN号;//只是返回, 可以加const;
        }
        virtual double net_price(size_t n) const {
            return n * price;//返回给定数量的书籍的销售总额, 派生类改写并使用不同的折扣计算方法;
        }
        virtual void debug() {//测试;
            cout << "bookNo = " << bookNo << " price = " << price << endl;
        }
        ~Quote() = default;//对析构函数进行动态绑定;
        //作为基类使用的类应该具有虚析构函数, 以保证在删除指向动态分配对象的基类指针时, 根据指针实际指向的对象所属的类型运行适当的析构函数;
    private:
        string bookNo;//书籍的ISBN编号;
    protected:
        double price = 0.0;//代表普通状态下不打折的价格;
};

class Bulk_quote : public Quote {
    public:
        Bulk_quote(const string &book = "", double sales_price = 0, size_t qty = 0, double disc_rate = 0) ://默认参数;
            Quote(book, sales_price), min_qty(qty), discount(disc_rate) {}//使用基类构造函数初始化派生类继承基类的成员变量;
        double net_price(size_t cnt) const override {//显示声明继承;
            if (cnt >= min_qty) {
                return cnt * (1 - discount) * price;
            }
            else return cnt * price;
        } 
        void debug() override {
            Quote::debug();//bookNo变量为private, 所以不能直接访问bookNo, 只能调用基类的debug()函数来显示;
            cout << "min_qty = " << min_qty << " discount = " << discount << endl;
        }
    private:
        size_t min_qty;//最少折扣所需数量;
        double discount;//折扣;   
}; 

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    Bulk_quote b("1111-999-90-99-9", 20.0, 12, 0.2);
    Quote *p = &b;//动态绑定;
    p -> debug();
    int cnt = 20;//购买20本书;
    double costs = p -> net_price(cnt);//所花费的数目;
    cout << costs << endl;
    return 0;
}
/*
bookNo = 1111-999-90-99-9 price = 20
min_qty = 12 discount = 0.2
320
*/

相关文章

  • C++继承练习4

    参考资料:《C++ Primer习题集(第5版)》 目的:练习虚函数的构造。Quote: 基类,提供基本的购书规则...

  • C++继承练习2

    参考资料:《C++Primer(第5版 )》 练习目的:虚函数与作用域。

  • C++继承练习3

    参考资料:《C++Primer习题集(第5版)》 目的:理解每个print函数的机制。话说这感觉有点儿像打草稿。。。

  • C++继承练习5

    参考资料:《C++Primer习题集(第5版)》 目的:练习继承层次的构造。

  • C++继承练习1

    参考资料:《C++Primer习题集(第5版)》 主要目的:熟悉虚函数、虚成员的定义,基类与派生类的关系。

  • 2017-12-29

    Java学习日记(4) 主要谈一下——继承extends 个 Tips : Java不像c++,Java是单继承(...

  • Java 基础 - 继承

    参考 C++多继承有什么坏处,Java的接口为什么可以摈弃这些坏处?C++多继承(钻石继承)的问题和解决C++继承...

  • 第十三章 类继承(4)c++的三种继承方式

    (四)c++的三种继承方式 c++有三种继承方式,分别是公有继承,私有继承和保护继承。 (1)公有继承 这是最常用...

  • 8-C++远征之继承篇-学习笔记

    C++远征之继承篇 开篇介绍 整个C++远征计划: 起航->离港->封装->继承 为什么要用继承? 为什么要有继承...

  • JAVA核心技术总结(五六章)继承&接口与内部类

    第五章 继承 在Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承 Java同C++一样,子类不能...

网友评论

      本文标题:C++继承练习4

      本文链接:https://www.haomeiwen.com/subject/gznjmttx.html