2014-01-29 185 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。这就是你应该总是这样做的。