2014-01-29 267 views
1

我在寫下面的程序。構造函數和默認構造函數的區別

寫稱爲CAccount類含有兩個 專用數據元素,使用accountNumber 一個整數和一個浮點accountBalance和三個 成員函數:

  1. 構造函數,它允許用戶設置 初始accountNumber的值和 accountBalance以及一個默認構造函數 ,它會提示輸入上述數據成員的值爲 。

  2. 稱爲inputTransaction的函數, 這對於 TRANSACTIONTYPE讀取一個字符值(「d」的存款 和「W」提款),以及用於transactionAmount浮點 值,其 更新accountBalance。

  3. 一個稱爲printBalance的函數,其中 在屏幕上輸出賬號 和accountBalance。

-

#include <iostream> 

using namespace std; 

class CAccount{ 
    public: 
     CAccount(){ 
      setValues(2, 5); 
      printBalance(); 
      inputTransaction(); 
      printBalance(); 
     } 
     void setValues(int aN, int aB); 
     void inputTransaction(); 
     void printBalance(); 
    private: 
     int accountNumber; 
     float accountBalance; 
}; 

void CAccount::setValues(int aN, int aB){ 
    accountNumber = aN; 
    accountBalance = aB; 
} 

void CAccount::inputTransaction(){ 
    char transactionType; 
    float transactionAmount; 
    cout << "Type of transaction? D - Deposit, W - Withdrawal" << endl; 
    cin >> transactionType; 
    cout << "Input the amount you want to deposit/withdraw" << endl; 
    cin >> transactionAmount; 
    if(transactionType == 'D'){ 
     accountBalance += transactionAmount; 
    } 
    else if(transactionType == 'W'){ 
     accountBalance -= transactionAmount; 
    } 
} 

void CAccount::printBalance(){ 
    cout << "Account number : " << accountNumber << endl << "Account balance : " << accountBalance << endl; 
} 

int main() 
{ 
    CAccount client; 
} 

我不明白這個部分:

1. A constructor that allows the user to set 
    initial values for accountNumber and 
    accountBalance and a default constructor 
    that prompts for the input of the values for 
    the above data members. 

到底是什麼構造函數,默認的構造函數之間的區別,我對這個有點糊塗步。

除此之外,我想請有更多經驗的人告訴我,在編寫類時使用的任何提示以及要避免哪些錯誤(這是我用C++編寫的第一堂課)。

回答

0

A 默認構造函數是一個不需要賦予參數的函數,無論是因爲它沒有任何參數,或者它具有缺省值。這樣的構造函數是特殊的,如Type var;Type var[10];new Type();調用並需要它們。

看你如何寫下void CAccount::setValues(int aN, int aB)?如果將setValues更改爲CAccount,它將變爲另一個構造函數,它具有2個參數int ...這是一個用戶定義的非缺省構造函數,可以滿足您的要求。

因爲您只有一個構造函數不接受任何參數,而是從stdin讀取輸入,所以您迫使用戶使用該構造函數,讀取輸入,並且如果您致​​電setValues,那麼您將覆蓋這些構造函數值與setValue參數....

2

默認的構造函數被定義爲根本沒有參數,而不是一般的構造函數,它可以有任意數量的參數。

你的第二個問題太籠統了,不能在這裏回答。請轉到網絡中的許多來源。 stackoverflow是針對特定問題而不是教程。

0

默認構造函數是一種構造函數。

哪裏,因爲我們有其他即conctructors:

  • 參數化的構造
  • 複製構造

如果我們不定義任何構造然後默認構造函數提供。但是,如果我們定義了任何構造函數,則不提供默認構造函數

默認構造函數不帶任何參數。其他構造函數需要參數。

對於您的第二個問題: 如果你定義任何構造函數(參數化或拷貝構造函數),那麼你應該定義一個默認的構造也。否則代碼像

ClassName obj = new ClassName(); 

會給建立錯誤。但這又取決於你的需求和用例。

構造函數一般用於初始化。但是你在構造函數中調用了一些通常沒有完成的函數。

3

如果您沒有爲類定義構造函數,編譯器會自動創建一個默認的無參數構造函數。只有沒有構造函數時纔會創建默認構造函數。如果您爲您的類定義了任何構造函數,則不會自動創建默認構造函數。

0

默認構造函數是一個編譯器生成的無參數構造函數。你可以顯式的定義一個構造函數,但是不是每個人都會把它稱爲默認構造函數。

你的程序應該爲accountNumber和accountBalance定義一個具有參數的構造函數,以及一個提示用戶的參數。像這樣:

#include <iostream> 
using namespace std; 

class CAccount { 
    public: 

     /** 
     * Constructor prompting the user for accountNumber and accountBalance 
     */ 
     CAccount() 
     { 
      inputTransaction(); 
      printBalance(); 
     } 
     /** 
     * Constructor initializing accountNumber and accountBalance with parameters 
     */ 
     CAccount(int accountNumber, float accountBalance) 
      : accountNumber(accountNumber), 
       accountBalance(accountBalance) 
     { 
      printBalance(); 
     } 

     void inputTransaction() { /* Implement me. */ } 
     void printBalance() { /* Implement me. */ } 

    private: 
     int accountNumber; 
     float accountBalance; 
}; 

正如您所看到的,我在構造函數中使用了初始值設定項來接受這些參數的accountNumber和accountBalance。這就是你應該總是這樣做的。