By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,332 Members | 1,414 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,332 IT Pros & Developers. It's quick & easy.

question about strings

P: n/a
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

Jul 23 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On 28 Jan 2005 00:32:18 -0800, wo*********@yahoo.com
<wo*********@yahoo.com> 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
Jul 23 '05 #2

P: n/a
<wo*********@yahoo.com> wrote in message
news:11*********************@z14g2000cwz.googlegro ups.com...
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
Jul 23 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.