question about strings

W

wongjoekmeu

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
 
U

ulrich

On 28 Jan 2005 00:32:18 -0800, (e-mail address removed)

[...]
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.
 
I

Ivan Vecerina

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:
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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top