question about strings

Discussion in 'C++' started by wongjoekmeu@yahoo.com, Jan 28, 2005.

  1. Guest

    Hello All,
    I have the following C++ code which I do not understand. I have a class
    Employee and a class String. Employee is using data members of type
    String.

    The definition of the overloaded constructor of Employee is as follow:

    -------------
    Employee::Employee(char *firstname, char *lastname, char *address, long
    salary):
    itsFirstname(firstname),
    itsLastname(lastname),
    itsAddress(address),
    itsSalary(salary)
    {}
    -------------

    This constructor requires three pointers of type char as input
    parameter and one long int.
    So I would suppose that when an object of type Employee is being
    created that in the input parameters (the first three) should be
    adresses of objects of type String. But now, to my surprise in the
    main() function it is written:
    -------------
    Employee Edie("Jane","Doe","1461 Shore Parkway", 20000);
    -------------
    Why is this correct ? The first three input parameters are character
    strings. How is that possible that this program compiles ?? Somewhere
    in the comments of the listing it says that the class String know how
    to convert a character string to a String. But if for instance this is
    valid and "Jane" is being converted to a String object, but then it is
    still not a pointer. Can anyone explain this to me.
    Thank you in advance.

    Robert
     
    , Jan 28, 2005
    #1
    1. Advertising

  2. ulrich Guest

    On 28 Jan 2005 00:32:18 -0800,
    <> wrote:

    [...]

    > Employee and a class String. Employee is using data members of type
    > String.


    [...]

    > Employee::Employee(char *firstname, char *lastname, char *address, long
    > salary):
    > itsFirstname(firstname),
    > itsLastname(lastname),
    > itsAddress(address),
    > itsSalary(salary)
    > {}


    [...]

    > Employee Edie("Jane","Doe","1461 Shore Parkway", 20000);
    > -------------
    > Why is this correct ? The first three input parameters are character
    > strings. How is that possible that this program compiles ?? Somewhere
    > in the comments of the listing it says that the class String know how
    > to convert a character string to a String. But if for instance this is
    > valid and "Jane" is being converted to a String object, but then it is
    > still not a pointer. Can anyone explain this to me.


    the string object takes a _copy_ of what your char* is pointing at. that's
    the whole magic.

    --
    have a nice day
    ulrich
     
    ulrich, Jan 28, 2005
    #2
    1. Advertising

  3. <> wrote in message
    news:...
    > Hello All,

    Hi,
    > I have the following C++ code which I do not understand. I have a class
    > Employee and a class String. Employee is using data members of type
    > String.

    I'll assume you mean std::string ?

    > The definition of the overloaded constructor of Employee is as follow:
    >
    > -------------
    > Employee::Employee(char *firstname, char *lastname, char *address, long
    > salary):
    > itsFirstname(firstname),
    > itsLastname(lastname),
    > itsAddress(address),
    > itsSalary(salary)
    > {}
    > -------------
    >
    > This constructor requires three pointers of type char as input
    > parameter and one long int.
    > So I would suppose that when an object of type Employee is being
    > created that in the input parameters (the first three) should be
    > adresses of objects of type String. But now, to my surprise in the
    > main() function it is written:
    > -------------
    > Employee Edie("Jane","Doe","1461 Shore Parkway", 20000);
    > -------------
    > Why is this correct ?

    std::string (and other string classes) typically have a constructor
    declared as: std::string::string( char const* p );
    This constructor copies the null-terminates string pointed to by p
    to initialize its contents.

    > The first three input parameters are character
    > strings. How is that possible that this program compiles ?? Somewhere
    > in the comments of the listing it says that the class String know how
    > to convert a character string to a String. But if for instance this is
    > valid and "Jane" is being converted to a String object, but then it is
    > still not a pointer. Can anyone explain this to me.

    The data is *copied* by the string constructor into its own storage.

    Actually, there a different problem with the Employee constructor
    it describes: its first 3 parameters should not be of type char*,
    but of either char const* or std::string const&.
    The declaration:
    Employee Edie("Jane","Doe","1461 Shore Parkway", 20000);
    passes string literals ( the "..." stuff ) which normally has type
    char const* ( actually char const[] ). A deprecated conversion
    to char* is however available, only for backwards-compatibility
    with C.


    I hope this helps,
    Ivan
    --
    http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
     
    Ivan Vecerina, Jan 28, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kurt Krueckeberg
    Replies:
    2
    Views:
    732
    =?ISO-8859-1?Q?Ney_Andr=E9_de_Mello_Zunino?=
    Nov 17, 2004
  2. Rick

    Comparing strings from within strings

    Rick, Oct 21, 2003, in forum: C Programming
    Replies:
    3
    Views:
    395
    Irrwahn Grausewitz
    Oct 21, 2003
  3. Klaus Neuner
    Replies:
    7
    Views:
    529
    Klaus Neuner
    Jul 26, 2004
  4. Girish Sahani
    Replies:
    17
    Views:
    587
    Boris Borcic
    Jun 9, 2006
  5. Ben

    Strings, Strings and Damned Strings

    Ben, Jun 22, 2006, in forum: C Programming
    Replies:
    14
    Views:
    814
    Malcolm
    Jun 24, 2006
Loading...

Share This Page