2014-01-29 3 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 а именно:

  • параметризованные конструкторы
  • Copy конструктор

Если мы не определить любой конструктор, то конструкторпо умолчанию предоставляется. Но если мы определим любой конструктор, то не будет установлен конструктор по умолчанию .

Конструктор по умолчанию не принимает никаких параметров. Там, где другим конструкторам нужен параметр.

Для вашего 2 вопроса: Если вы определили любой конструктор (параметризованный или конструктор копирования), то вы должны определить конструктор по умолчанию также. В противном случае код, подобный

ClassName obj = new ClassName(); 

даст ошибку сборки. Но это снова зависит от вашего требования и использования.

И конструктор обычно используется для инициализации. Но вы вызывали некоторые функции внутри конструктора, которые обычно не выполняются.

3

Если вы не определяете конструктор для класса, конструктор без параметров автоматически создается компилятором. Конструктор по умолчанию создается только в случае отсутствия конструкторов. Если вы определяете какой-либо конструктор для своего класса, конструктор по умолчанию автоматически не создается.

0

Конструктор по умолчанию - это сгенерированный конструктором без параметров компилятор. Вы можете явно определить конструктор, принимающий нулевые аргументы, но не каждый может назвать его конструктором по умолчанию.

Ваша программа должна определить конструктор с параметрами для accountNumber и accountBalance и параметр-less, который запрашивает пользователя. Как это:

#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 в конструкторе принимает эти аргументы. Это то, что вы всегда должны делать.

Смежные вопросы