很抱歉打扰大家了 VC的问题
#ifndef ITEM_H
#define ITEM_H
#include <string>
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;
};
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;
double discount;
};
class Bulk_item : public Disc_item{
public:
Bulk_item(const std::string& book = " ", double sales_rate = 0.0,
size_t qty = 0, double disc_rate = 0.0)
:Disc_item(book, sales_rate, qty, disc_rate)
{}
double net_price(size_t cnt) const
{
if(cnt > = quantity)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
virtual Bulk_item* clone() const
{
return new Bulk_item(*this);
}
};
class Lds_item : public Disc_item{
public:
Lds_item(const std::string& book = " ", double sales_rate = 0.0,
size_t qty = 0, double disc_rate = 0.0)
:Disc_item(book, sales_rate, 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;
}
virtual Lds_item* clone() const
{
return new Lds_item(*this);
}
};
#endif
--------------------Configuration: Item_base - Win32 Debug--------------------
Compiling...
Item_base.cpp
d:\myprojects\test\item_base.cpp(68) : error C2555: 'Bulk_item::clone ' : overriding virtual function differs from 'Item_base::clone ' only by return type or calling convention
d:\myprojects\test\item_base.cpp(6) : see declaration of 'Item_base '
d:\myprojects\test\item_base.cpp(89) : error C2555: 'Lds_item::clone ' : overriding virtual function differs from 'Item_base::clone ' only by return type or calling convention
执行 cl.exe 时出错.
Item_base.exe - 1 error(s), 0 warning(s)
不是C++里 虚函数clone不是唯一一个例外吗? 可以返回不同
但是这里用VC就是编译通不过 卡在virtual clone那后面两段里
请问VC里如何改 或者我写的程序是不是有问题?
请大家帮助 谢谢
[解决办法]
那就把所有的clone这个虚函数返回Item_base *这个基类的指针啊!
[解决办法]
不知道你这个例外是怎么来的,语法错误。