2016-05-21 41 views
0

爲標題說我有一些問題,在子類構造函數調用基類構造函數調用基類2參數的構造成子一個參數的構造函數

基地:

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是未定義的。 感謝您的幫助

+4

如何界定呢? – P0W

+0

您是否考慮過將Savings設置爲自己的類,然後讓Account可選擇包含Savings的實例(例如,指向Savings對象的指針,作爲Account的成員變量)。這樣您可以將儲蓄對象添加到現有帳戶。 – Logicrat

回答

1

想起你如何創建一個SavingsAccount。使用

SavingsAccount ac1(0.01); 

你能創建一個。如果你這樣做,這將是該對象上的平衡?誰是該對象的Customer

當您創建SavingsAccount時,您需要提供餘額以及Customer。例如:

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) {} 
+0

現在感謝更清楚了,你能解釋一下爲什麼我需要最後一部分interestRate(intRate)? – Zile

+0

@Zile簡單地用'intRate'初始化'interestRate' – ArchbishopOfBanterbury

+0

所以,如果我這樣寫它,我不需要line interestRate = intRate;? – Zile

0

在子類Savings您需要定義bcu地方傳遞給基地Account,例如構造函數:

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

使得Savings構造函數接受所需的doubleCustomer* ARGS傳遞給基類的構造函數。

+0

我已經在savings.h和account.h中包含account.h我有:保護: \t雙餘額; \t客戶定製; – Zile

0

我認爲以前的答案是錯誤的,因爲在帳戶你不必也把intRate。 所以:

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

這是我的任務中的一個問題:一個三參數構造函數,調用Account基類雙參數構造函數,然後將interestRate設置爲用戶提供的利率(用戶通過測試驅動程序提供)。 – Zile

+0

你的例子中的三參數構造函數在哪裏? – andre3312

+0

我認爲2參數構造函數是Account(b,cu)和一個參數構造函數是Savings(double intRate) – Zile

相關問題