<> wrote in message
news: 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