构造函数和默认构造函数之间的区别

时间:2014-01-29 08:35:24

标签: c++ class constructor

我正在编写以下程序。

编写一个名为CAccount的类,其中包含两个     私有数据元素,整数accountNumber     和一个浮点账户平衡,三个     成员职能:

  1. 允许用户设置的构造函数         accountNumber和的初始值         accountBalance和默认构造函数         提示输入值         以上数据成员。

  2. 一个名为inputTransaction的函数,         它读取一个字符值         transactionType(' D'存款         和' W'退出)和浮点         transactionAmount的值,即         更新accountBalance。

  3. 一个名为printBalance的函数,它         在屏幕上打印accountNumber         和accountBalance。

  4. -

    #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 ++编写的第一堂课)。

5 个答案:

答案 0 :(得分:3)

如果没有为类定义构造函数,编译器会自动创建默认的无参数构造函数。仅当没有构造函数时,才会创建默认构造函数。如果为类定义任何构造函数,则不会自动创建默认构造函数。

答案 1 :(得分:2)

默认构造函数被定义为根本没有参数,而不是一般的构造函数,它可以包含任意数量的参数。

你的第二个问题太笼统,无法在这里回答。请转向网络中的许多来源。 stackoverflow是针对特定问题而不是教程。

答案 2 :(得分:0)

默认构造函数是一个不需要被赋予参数的构造函数,因为它没有任何参数,或者它没有默认值。这样的构造函数在说Type var;Type var[10];的意义上是特殊的  或new Type();调用并要求它们。

了解您的撰写方式void CAccount::setValues(int aN, int aB)?如果您将setValues更改为CAccount,它将成为另一个具有2个int参数的构造函数...这是一个用户定义的非默认构造函数,并且满足您的要求。

因为你只有一个构造函数没有接受任何参数但是从stdin读取输入,你强迫用户使用那个构造函数,读取输入,如果你调用{{1}你用setValues个参数覆盖这些值......

答案 3 :(得分:0)

默认构造函数是一种构造函数。

我们有其他的结构,即:

  • 参数化构造函数
  • 复制构造函数

如果我们没有定义任何构造函数,那么提供默认构造函数。但是如果我们定义任何构造函数,那么就不会提供默认构造函数

默认构造函数不带任何参数。其他构造函数需要参数的地方。

第二个问题: 如果您定义任何构造函数(参数化或复制构造函数),那么您还应该定义一个默认构造函数。否则代码如

ClassName obj = new ClassName();

会给出构建错误。但这又取决于你的要求和用例。

构造函数通常用于初始化。但是你在构造函数中调用了一些函数,这些函数通常都没有完成。

答案 4 :(得分: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的初始值设定项。这就是你应该经常做的事情。