将基类2参数构造函数调用为子类一个参数构造函数

时间:2016-05-21 23:13:47

标签: c++ class-constructors inherited-constructors

标题说我在子类构造函数

中调用基类构造函数时遇到了一些问题

基地:

account.h
    Account(double, Customer*)
account.cpp
    Account::Account(double b, Customer *cu)
    {
    balance = b;
    cust = *cu;
    }

子类:

savings.h
    Savings(double);
savings.cpp
    Savings::Savings(double intRate) : Account(b, cu)
    {
    interestRate = intRate;
    }

我得到的错误是b和cu未定义。 谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

考虑如何创建SavingsAccount

可以使用

创建一个
SavingsAccount ac1(0.01);

如果你这样做了,那个对象的平衡是什么?谁将成为该对象的Customer

您需要在创建Customer时提供余额以及SavingsAccount。类似的东西:

Customer* cu = new Customer; // Or get the customer based on some other data
SavingsAccount ac1(100.0, cu, 0.01);

有道理。您正在提供SavingsAccount所需的所有数据。要创建这样的对象,您需要适当地定义SavingsAccount的构造函数。

Savings::Savings(double b, Customer *cu, double intRate);

可以通过以下方式正确实施:

Savings::Savings(double b,
                 Customer *cu,
                 double intRate) : Account(b, cu), interestRate(intRate) {}

答案 1 :(得分:0)

在您的子类Savings中,您需要在某处定义bcu以传递给基础Account的构造函数,例如:

Savings::Savings(double b, Customer* cu, double intRate) : Account(b, cu) {
    interestRate = intRate;
}

使Savings的构造函数获取传递给基类构造函数所需的doubleCustomer* args。

答案 2 :(得分:0)

我认为之前的答案是错误的,因为在帐户中你也不必同时使用intRate。 所以:

Savings::Savings(double b, Customer* cu, double intRate) : Account(b, cu)
{ interestRate = intRate; }