c++继承中有关shared_ptr的一些疑问

sinat_27233737 sinat_27233737 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

class Basket {
public:
void add_item(const std::shared_ptr<Quote>& q) {
item.insert(q);
}
double print_price(std::ostream& os) const{
double sum=0;
for (auto i = item.cbegin(); i != item.cend(); i = item.upper_bound(*i)) {
sum += print_total(os, **i, item.count(*i));
}
os << "书的总价格为:" << sum << std::endl;
return sum;
}
private:
static bool compare(const std::shared_ptr<Quote> &p, const std::shared_ptr<Quote> &q) {
return p->bookNo < q->bookNo;
}
std::multiset<std::shared_ptr<Quote>,decltype(compare)*> item{compare};//2、这里也不太懂
};


其中,BulkQuote是Quote的派生类,代表有打折的书。

int main() {
Basket basket;
BulkQuote a("a", 10, 5, 0.5);
basket.add_item(make_shared<BulkQuote>(a));//1、这里不懂!
basket.print_price(cout);


1、这里为什么写成“ basket.add_item(make_shared<BulkQuote>(a));”就不行,调用的是静态类型,即Quote,得到的是没打折时的价格?非要写成basket.add_item(make_shared<BulkQuote>(“a”,10,5,0.5));才可以呢?
还有,为什么不可以写成"basket.add_item(new BulkQuote(a));"提示"不存在从'BulkQuote*'到std::shared_ptr<Quote>"的适当构造函数?

2、 item{compare}这里为什么要定义成花括号,之前这里不都是定义成圆括号的吗?还有compare函数需要定义成static的呢?
...全文

相关推荐

评论 4
收藏 已收藏
分享
返回顶部
sinat_27233737
新手乐园 33,315 成员 41,769 内容