zoukankan      html  css  js  c++  java
  • C++在容器中放置有继承关系的对象和指针区别

    《C++ Primer 5》15.28和15.29两题

    1 .h头文件:包括父类Quote和子类Bulk_quote的定义

    bookQuote.h:

    #pragma once
    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class Quote {
    	//friend ostream& operator<<(ostream&, Quote&);
    public:
    	Quote() = default;
    	Quote(const string& book = "", double sales_price = 0.0) :bookNo(book), price(sales_price) {}
    
    	string isbn() const {
    		return bookNo;
    	}
    
    	virtual double net_price(size_t n) const {
    		return n * price;
    	}
    
    	virtual ~Quote(){}
    private:
    	string bookNo;
    protected:
    	double price = 0.0;
    };
    
    class Bulk_quote :public Quote {
    public:
    	Bulk_quote(const string& book = "", double sales_price = 0.0, size_t qty = 0, double disc = 0.0) :
    		Quote(book, sales_price), min_qty(qty), discount(disc) {}
    
    	double net_price(size_t cnt) const {
    		if (cnt > min_qty) {
    			return cnt * (1 - discount) * price;
    		}
    		else {
    			return cnt * price;
    		}
    	}
    
    	~Bulk_quote(){}
    private:
    	size_t min_qty;
    	double discount;
    };
    

    2-1 .cpp文件:定义父类Quote对象的vector容器,存入子类Bulk_quote对象

    #include<iostream>
    #include<string>
    #include<vector>
    #include"bookQuote.h" //1中定义的.h头文件
    #include<memory> //shared_ptr智能指针
    using namespace std;
    
    int main() {
    	vector<Quote> itemVec;
    	for (size_t i = 0;i != 10;++i) {
    		Bulk_quote item("C++ Primer 5", 6, 5, 0.5);
    		itemVec.push_back(item);
    	}
    	double sum = 0;
    	for (auto iter = itemVec.begin();iter != itemVec.end();++iter) {
    		sum += iter->net_price(10);
    	}
    	cout << sum << endl;
    	return 0;
    }
    

    输出结果,600。

    2-2 .cpp文件:定义指向父类Quote对象的智能指针的vector容器,存入指向子类Bulk_quote对象的智能指针

    #include<iostream>
    #include<string>
    #include<vector>
    #include"bookQuote.h"
    #include<memory>
    using namespace std;
    
    int main() {
    	vector<shared_ptr<Quote>> itemVec;
    	for (size_t i = 0;i != 10;++i) {
    		Bulk_quote item("C++ Primer 5", 6, 5, 0.5);
    		itemVec.push_back(make_shared<Bulk_quote>(item));
    	}
    	double sum = 0;
    	for (auto iter = itemVec.begin();iter != itemVec.end();++iter) {
    		sum += (*iter)->net_price(10);
    	}
    	cout << sum << endl;
    	return 0;
    }
    

    输出结果:300。

  • 相关阅读:
    【20171123】【GITC精华演讲】贝业新兄弟李济宏:如何做到企业信息化建设的加减乘除
    920记者招待会: 对话详解海尔张瑞敏首席的人单合一
    存货控制中的ABC分类释义
    对员工宽容的公司 都死掉了
    小型互联网公司的IT系统建设思路
    第三方物流是什么
    伟哥对RTO & RPO的通俗理解
    【20170506】贝业新兄弟IT总监李济宏:第三方家居物流的IT架构探索
    【Vegas原创】VirtualBox扩容、分割的整体方案
    数据通信基础(物理层)学习笔记
  • 原文地址:https://www.cnblogs.com/dindin1995/p/13059126.html
Copyright © 2011-2022 走看看