0

我的教授给出了以下代码来展示继承的示例:

//Base class
class Inventory {
    int quant, reorder; // #on-hand & reorder qty
    double price; // price of item
    char * descrip; // description of item
public:
    Inventory(int q, int r, double p, char *); // constructor
    ~Inventory(); // destructor
    void print();
    int get_quant() { return quant; }
    int get_reorder() { return reorder; }
    double get_price() { return price; }
};
Inventory::Inventory(int q, int r, double p, char * d) : quant (q), reorder (r), price (p)
{
    descrip = new char[strlen(d)+1]; // need the +1 for string terminator
    strcpy(descrip, d);
} // Initialization list



//Derived Auto Class
class Auto : public Inventory {
    char *dealer;
public:
    Auto(int q, int r, double p, char * d, char *dea); // constructor
    ~Auto(); // destructor
    void print();
    char * get_dealer() { return dealer; }
};
Auto::Auto(int q, int r, double p, char * d, char * dea) : Inventory(q, r, p, d) // base constructor
{
    dealer = new char(strlen(dea)+1); // need +1 for string terminator
    strcpy(dealer, dea);
}

我很困惑“Auto::Auto(int q, int r, double p, char * d, char * dea) : Inventory(q, r, p, d)”,什么是“Inventory(q, r , p, d)" 做。同样在“Inventory::Inventory(int q, int r, double p, char * d) : quant (q), reorder (r), price (p)”行中,我不确定他在用 quant 做什么(q)、重新排序 (r)、价格 (p)。这些变量是否与在类中定义为 int quant、reorder 和 double price 的变量相同?如果是这样,为什么他必须在构造函数中使用。以及他为什么/如何使用基类的构造函数来帮助定义“自动”类构造函数。

4

2 回答 2

5

他正在使用“初始化列表”。

他正在调用基类构造函数。为调用参数化构造函数的类Auto::Auto(int q, int r, double p, char * d, char * dea) : Inventory(q, r, p, d)定义一个构造函数。需要调用参数化构造函数,因为它继承自并定义了参数化构造函数。C++ 规定,如果您定义参数化构造函数,则默认构造函数将被覆盖,并且您可以实例化该类或任何子类的对象的唯一方法是调用参数化构造函数(或通过定义备用默认构造函数)。AutoInventoryAutoInventoryInventory

在 的情况下,他分别用值和Inventory::Inventory(int q, int r, double p, char * d) : quant (q), reorder (r), price (p)初始化字段quantreorder和。这实际上是一种速记,您可以改为在构造函数主体中分配值(除非该成员是常量)。priceqrp

于 2012-12-05T01:35:18.073 回答
4

在子构造函数中,你总是默认调用父构造函数。如果该构造函数接收参数,则必须使用 : 表示法显式编写调用。

于 2012-12-05T20:45:01.870 回答