首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

很抱歉打扰大家了 VC的有关问题

2012-01-15 
很抱歉打扰大家了 VC的问题#ifndefITEM_H#defineITEM_H#includestringclassItem_base{public:Item_base(

很抱歉打扰大家了 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 *这个基类的指针啊!
[解决办法]
不知道你这个例外是怎么来的,语法错误。

热点排行