第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

請問各位,這是什么原因?qū)е碌??謝謝

請問各位,這是什么原因?qū)е碌模恐x謝

C++
小怪獸愛吃肉 2023-04-24 18:14:41
class Item_base{public:Item_base(const std::string &book = " ",double sales_price =0.0):isbn(book),price(sales_price) {}std::string book() const{return isbn;}virtual double net_price(size_t n) const{return n*price;}virtual Item_base* clone() const{return new Item_base(*this);}virtual ~Item_base() {}private:std::string isbn;protected:double price;};//保存折扣率和可實(shí)行折扣策略的數(shù)量,派生類將使用這些數(shù)據(jù)實(shí)現(xiàn)定價(jià)策略class Disc_item : public Item_base{public:Disc_item(const std::string& book=" ",double sales_price =0.0,size_t qty = 0,double disc_rate = 0.0):Item_base(book,sales_price),quantity(qty),discount(disc_rate) {}double net_price(size_t) const = 0;std::pair<size_t,double> discount_policy() const{return std::make_pair(quantity,discount);}protected:size_t quantity; //可實(shí)行折扣策略的購買量double discount; //折扣率};//批量購買折扣類class Bulk_item : public Disc_item{public:Bulk_item(const std::string& book=" ",double sales_price = 0.0,size_t qty = 0 ,double disc_rate = 0.0):Disc_item(book,sales_price,qty,disc_rate) {}double net_price(size_t cnt) const{if (cnt >= quantity)return cnt*(1-discount)*price;else return cnt*price;}Bulk_item* clone() const{return new Bulk_item(*this);}};//有限折扣率class Lds_item : public Disc_item{public:Lds_item(const std::string& book = " ",double sales_price = 0.0,size_t qty = 0,double disc_rate = 0.0) : Disc_item(book,sales_price,qty,disc_rate) {}double net_price(size_t cnt) const{if (cnt <= quantity)return cnt*(1-discount)*price;else return cnt*price - quantity*discount*price;}Lds_item* clone() const{return new Lds_item(*this);}};然而在VC++ 6.0平臺上編譯時(shí),提示如下錯(cuò)誤:(1)error C2555: 'Bulk_item::clone' : overriding virtual function differs from 'Item_base::clone' only by return type or calling convention;(2)error C2555: 'Lds_item::clone' : overriding virtual function differs from 'Item_base::clone' only by return type or calling convention
查看完整描述

2 回答

?
繁花如伊

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊

沒什么原因,微軟編譯器的問題,VC9似乎可以了。換成GCC完全可以的。別太依賴某一個(gè)編譯器,多嘗試幾個(gè)看看。

可以這樣設(shè)計(jì):
void *clone() const
{
return new Bulk_item(*this);
}
然后強(qiáng)制轉(zhuǎn)化void *指針,但是強(qiáng)制轉(zhuǎn)化類型就體現(xiàn)不出虛函數(shù)的特點(diǎn)了,這只是一個(gè)折衷的方法。

一樓的說也有道理的,但是你的題目給出的是復(fù)制未知類型,那樣的話就不是復(fù)制未知類型了。
至于虛函數(shù)重寫的返回值問題,你這種寫法是對的,這是C++新標(biāo)準(zhǔn)加進(jìn)去的,只不過不是所有編譯器都實(shí)現(xiàn)了。這是一個(gè)例外:當(dāng)基類虛函數(shù)返回是指針或者引用時(shí),派生類也可以隨著改變返回類型,該返回類型應(yīng)該為基類返回的類或者其派生類的指針或引用。

查看完整回答
反對 回復(fù) 2023-04-27
?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

你重寫了base里的定義的虛函數(shù),但是返回類型不對,這是編譯器不允許的

我猜測你的意圖在于返回bulk或者lds指針,但clone的原型為返回base指針,既然base里定義好了接口并且定義為虛函數(shù),你可以將出錯(cuò)的地方(Bulk_item* clone()const 和 Lds_item* clone() const
)改為Base_item*clone()const,這才是多態(tài)的用法

查看完整回答
反對 回復(fù) 2023-04-27
  • 2 回答
  • 0 關(guān)注
  • 263 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號