Member Avatar for slanker70

Hi,

First of all I'd like to apologise if there is any ambiguity in my questions since I'm new at c++.

My problem is trying to figure out how to initialise an object of a class that would depend on the user.

For example I have class Account and as far as I know I can initialise it's constructor by using the command eg.

Account acc1 (jack, 500);

First problem is how can I make a user set the initialisation? For example the user enter it's name and the ammount he/she wishes to deposit then an account object would be initialised.

Therefore to call a method of this object I could use a command eg.

acc1.getBalance();

Second problem is, since there is no object yet, how can I determined what object name will be used in the command above if there is no object that have been initialised?

I know that this is wuite a lot of but I would really appreciate any help.

Thank you,

#include <iostream>
#include <string>
using namespace std ;

struct account
{
  explicit account( const string& name, double amount = 0.0 ) 
    : _name(name), _amount(amount) {}
  // ...
  private:
    const string _name ;
    double _amount ;
};

int main()
{
  string name ; double amt ;
  cout << "enter name <space> amount: " ;
  // assumes there are no embedded white spaces in name
  cin >> name  >> amt ; 
  account ac1(name,amt) ;
}
Member Avatar for slanker70

First of all thank you for your reply, but I still have some problems which I'm not sure of.

Basically my programme is like this

CLASS ACCOUNT:

// file account.h
// account class definition

#ifndef ACCOUNT_H
#define ACCOUNT_H

class Account {

public:
    Account( const char *, const char *, int = 0 );  // constructor
    ~Account();                                  // destructor

    void setBalance(int); // set the accoutn balance to a certain ammount
    void deposit(int);    // deposit money to account balance
    void withdraw(int);   // withdraw money from account balance

    const char *getFirstName() const;       // return first name
    const char *getLastName() const;        // return last name    
    void getBalance();                       // return account balance

    // static member function
    static int getAccountNumber();  // return account number


private:
    char *firstName;
    char *lastName;
    int balance;

    // static data member
    static int accountNumber;  // number of accounts instantiated

}; // end class account

CLASS ACCOUNTIMPLEMENTATION:

#endif 

// file employee2.cpp
// Member-function definitions for class Account

#include <iostream>
#include <new>          // C++ standard new operator
#include <cstring>      // strcpy and strlen prototypes
#include "account.h"  // account class definition
using namespace std;

// define and initialize static data member
int Account::accountNumber = 0;

// define static member function that returns number of
// account objects instantiated
int Account::getAccountNumber()
{
    return accountNumber;
} // end static function getAccountNumber

// constructor dynamically allocates space for
// first and last name and uses strcpy to copy
// first and last names into the object
Account::Account( const char *first, const char *last, int ammount )
{
    firstName = new char[ strlen( first ) + 1 ];
    strcpy( firstName, first );

    lastName = new char[ strlen( last ) + 1 ];
    strcpy( lastName, last );

    Account::setBalance(ammount);

    ++accountNumber;  // increment static count of account number

    cout << "Account constructor for " << firstName
         << ' ' << lastName << " called." << endl;

} // end Eaccount constructor

// destructor deallocates dynamically allocated memory
Account::~Account()
{
    cout << "~Account() called for " << firstName
         << ' ' << lastName << endl;

    delete [] firstName;  // recapture memory
    delete [] lastName;   // recapture memory

    --accountNumber;  // decrement static count of account number

} // end destructor ~Account

void Account::setBalance(int ammount)
{
    balance =+ ammount;
}

void Account::deposit(int ammount)
{
    if(ammount > 0)
        balance += ammount; // add balance with ammount
}

void Account::withdraw(int ammount)
{
    if(ammount > 0)
        balance -= ammount; // substract balance with ammount
}

// return first name of account
const char *Account::getFirstName() const
{
    // const before return type prevents client from modifying
    // private data; client should copy returned string before
    // destructor deletes storage to prevent undefined pointer
    return firstName;

} // end function getFirstName

// return last name of account
const char *Account::getLastName() const
{
    // const before return type prevents client from modifying
    // private data; client should copy returned string before
    // destructor deletes storage to prevent undefined pointer
    return lastName;

} // end function getLastName

void Account::getBalance()
{
    cout << "Your account balance is: " << balance << endl;
} // end function getBalance

MY MAIN:

// file myMain.cpp
// Driver to test class account

#include <iostream>
#include <new>          // C++ standard new operator
#include "account.h"    // account class definition
using namespace std;

int main()
{    
    Account susan( "Susan", "Baker", 100 );
    susan.withdraw(50);

} // end main

Here I invoke the class account constructor from within the programme, but for example if I wanted the user to invoke it eg.

switch
   case("1")
      The user enter the input that will be passed to the class      account  constructor eg. firstName, lastName and ammount.
   case("2")
      The user wishes to withdraw money so
       susan.withdraw(); would have to be invoked, but since the oject susan it self haven't  been initialised an error occured.

Any suggestions?

Thank you

do not allow attempt at withdraw if account has not been created.
pseudocode

void user_input()
{
  account* ac = 0 ;
  // accept user input
  // if create
  {
       if( ac == 0 )
       {
          string name ; double amt ;
          cout << "enter name <space> amount: " ;
          // assumes there are no embedded white spaces in name
          cin >> name  >> amt ; 
          ac = new account(name,amt) ;
       }
       else cerr << "account already created\n" ;
              // perhaps you can offer to delete and recreate?
  }
  // if withdraw
  if( ac == 0 ) cerr << "can't withdraw if you haven't created an account\n" ;
  else 
  {
    // accept amout
    ac->withdraw(amt) ;
  }
  delete ac ; // before you return
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.