这是我知道我做错了的事情之一。我的任务很简单。
用c ++创建3个类,
产品,软件,书籍。产品超级,书籍和软件都是产品。 然后制作一个指针数组,并用软件和书籍填充数组。
所以我做了以下
int main()
{
Product *productList[10];
Book *pBook;
Book q(5);
pBook = &q;
pBook->getPrice();
Software *pSoftware;
Software g(5);
pSoftware = &g;
pSoftware ->getPrice();
productList[0] = pSoftware; // fill it with software, cannot do this.
有没有办法将子类插入超类数组。或者我应该将指针数组定义为其他东西。
下面的类定义
class Product
{
public:
double price;
double getPrice();
Product::Product(double price){};
};
class Book: public Product
{
public:
Book::Book(double price)
:Product(price)
{
}
double getPrice();
};
class Software: public Product
{
public:
Software::Software(double price)
:Product(price) // equivalent of super in java?
{
} // code of constructor goes here.
double getPrice();
};
答案 0 :(得分:3)
您应该使用公共继承:
class Book : public Product {
...
};
<强> [编辑] 强>
如果要在子类中以不同方式实现它,则还应将getPrice()
声明为虚拟。当您调用getPrice()
指向getPrice()
的指针时,这将使编译器调用正确子类的Product
:
virtual double getPrice();
答案 1 :(得分:0)
由于数组的类型为Product
,因此您应将pSoftware
声明为指向Product
的指针:
Product *pSoftware = new Software(5);
// ...
productList[0] = pSoftware;
答案 2 :(得分:0)
已经有一段时间了,但是C ++中的默认继承类型是什么?应
class Book:Product
{
是
class Book: public Product
{
无论如何要明确是一个好主意。
答案 3 :(得分:0)
难道您不能将软件*转换为产品*以将其放入阵列中吗? productList [0] =(Product *)pSoftware;