在c ++中将子类插入超类数组中

时间:2011-02-07 17:00:11

标签: c++ arrays inheritance pointers subclass

这是我知道我做错了的事情之一。我的任务很简单。

用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();
};

4 个答案:

答案 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;