c++ primer第15章这几个例子中的构造函数形式不太理解

//向基类构造函数传递实参p491
class Bulk_item : public Item_base{
public:
    Bulk_item(const std::string& book,double sales_price,std::size_t qty = 0,double disc_rate = 0.0):
      Item_base(book,sales_price),min_qty(qty),discount(disc_rate){}
};

//在派生类构造函数中使用默认实参p491
class Bulk_item : public Item_base{
public:
    Bulk_item(const std::string& book,double sales_price = 0.0,std::size_t qty = 0,double disc_rate = 0.0):
      Item_base(book,sales_price),min_qty(qty),discount(disc_rate){}
};

//定义Disc_item类p492
class Disc_item : public Item_base{
public:
    Disc_item(const std::string& book = "", double sales_price = 0.0, std::size_t qty = 0, double disc_rate = 0.0):
      Item_base(book, sales_price),quantity(qty), discount(disc_rate){}
protected:
    std::size_t quantity;
    double discount;
};

//重构
//重新实现Bulk_item以继承Disc_itemp493
class Bulk_item : public Disc_item{
public:
    Bulk_item(const std::string& book = "", double sales_price = 0.0,std::size_t qty = 0,double disc_rate = 0.0):
      Disc_item(book,sales_price,qty,disc_rate){}//不太懂

      double net_price(std::size_t) const;
};
时间: 2024-10-12 14:38:38

c++ primer第15章这几个例子中的构造函数形式不太理解的相关文章

【C++ Primer 第15章】抽象基类

抽象基类 [注意]我们也可以为纯虚函数提供定义,不过函数体必须在类的外部,也就是说,我们不能再内部为一个=0思网函数提供函数体. C++中含有(或未覆盖直接继承)纯虚函数的类是抽象基类,抽象基类负责定义接口,而后续的的其他类可以覆盖接口.我们不能直接出创建一个抽象基类的对象. C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”. C++中的纯虚函数也是一种“运行时多态”. 1 class A 2 { 3 public: 4 virtual void out1(str

【【C++ Primer 第15章】 虚析构函数

学习资料 • C++中基类的析构函数为什么要用virtual虚析构函数 虚析构函数 1. 正文 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏.具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放.假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数.那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏.所以,为了防止这种情况的发生,C++中基类的析构函

C++ Primer Plus 第15章 友元、异常和其他

第15章 友元.异常和其他 1.友元不仅有友元函数,还能是友元类 还可以将类中的某一个成员函数指定为另一个类的友元 尽管友元被授予从外部访问私有部门的权限,单并不与面向对象编程思想相愽,相反,它们提高了公有接口的灵活性 2.类的成员函数作为其他类的友元,涉及到类的声明顺序. 还有一个函数作为两个类的友元 这方面内容看P607-611 3.嵌套类:在另一个类中声明的类被称为嵌套类 类嵌套与包含不一样.包含意味着将一个类对象作为另一个类的成员,而对类进行嵌套不创建类成员,而是定义了一种类型. 4.对

C++ Primer学习总结 第15章 面向对象程序设计

第15章 面向对象程序设计 1.    构造基类和派生类. 其中A类是基类,B类是派生类.派生类的构造函数必须重新写过,不能继承.(因为毕竟两个类的类名都不一样,不可能构造函数继承)只继承其他的成员函数和成员变量. 派生类可以覆盖基类的虚函数,但是也可以选择不覆盖(即直接使用父类的函数版本)比例A类的print_1()虚函数就没有被覆盖. 基类的静态成员:如果基类有一个静态成员,那么基类和所有派生类都共同拥有这仅有的一个静态成员. 2.    基类的虚函数默认实参最好与派生类的虚函数默认实参一致

《C++Primer》14、15章

第14章 重载运算符与类型转换 14.1 基本概念 只有当操作的含义对于用户来说清晰明了时才使用运算符. 选择作为成员还是非成员? 赋值.下标.调用和成员访问运算符必须是成员. 复合赋值运算符一般是成员. 改变对象状态或者与给定类型密切相关的,如递增.解引用通常是成员. 具有对称性的运算符可能转换任意一端元素的运算对象,例如算数.相等.关系和位运算等,通常是非成员函数. 14.2 输入输出运算符(略) 14.3 算术与关系运算符(略) 14.4 赋值运算符(略) 14.5 下标运算符 通常会定义

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

第15章 就不能换DB吗?—抽象工厂模式

由于抽象工厂在我们编程当中经常使用和常见,所有本篇文章对<大话设计模式>中的15章做了很详细的比较.通过一个Dao层可以更换访问任意数据库的例子来学习抽象工厂模式.例如:Dao层可以访问Sqlserver数据库,也可以访问Access数据库,当程序新增访问Oracle数据库时,无需修改现有代码,只需要添加访问Oracle相关的类就可以,实现了开闭原则.本篇文章的例子中每种数据库上都有User和Department表,我们Dao层对这两个表进行查询和插入操作. 最基本数据库访问 一下是访问Sql

《白帽子讲WEB安全》学习笔记之第15章 web server配置安全

第15章 web server配置安全 15.1 apache安全 在linux部署安装web Server时候一定主要要使用"最小权限原则".尽量不要使用root部署. 15.2 nginx安全 Nginx 安全配置指南技术手册 PDF 下载 免费下载地址在http://linux.linuxidc.com/ 用户名与密码都是www.linuxidc.com 具体下载目录在 /pub/服务器相关教程/Nginx/Nginx 安全配置指南技术手册/ 参考资料:http://my.osc

【Android】15.0 第15章 广播和通知&mdash;本章示例主界面

分类:C#.Android.VS2015: 创建日期:2016-02-28 一.简介 广播(Broadcast):其功能类似于收音机的广播,你只要调到那个台(只要在接收的类中注册了要接收的广播),就能收到这个台播放的信息. 通知(Notifications):安卓的服务组件(Android Service,后面章节再细讲)本来是在后台运行的,可是,用户可能希望关注某个后台任务当前正在执行的状态或者结果,此时就可以利用"通知"在前台告诉用户. 二.本章示例主界面 1.运行截图 这个截图也