Reputation: 31
Given this code
class Address
{
private:
char * streetName;
int houseNumber;
public:
Address(char* strName, int houseNumber)
{....}
}
class Person
{
protected:
char *name, * phoneNumber;
Address addr;
public:
Person(char* n, char* pN, char* stN, char* hsN): addr(stN,hsN)
{
//...... assign variable for person
}
};
class Officer: public Person
{
private:
double salary;
public:
// How to write the constructor??
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary): .... ????
}
How to write the constructor for the derived class Officer which has five input variables, in which _streetName and _streetNumber will be feed to the member object addr contained in the base class Person?
Upvotes: 1
Views: 2330
Reputation:
You can call the constructor like this:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary): Person(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber),salary(salary){}
Upvotes: 1
Reputation: 67301
First thing you need to know that the officer is also a person. means you have to do all the stuff for an officer that was done in person .
so your constructor of officer should internally call person's constructor like below:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber)
Now you also have to construct the value of the salary.so your constructor becomes:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber),salary(_salary)
{}
Upvotes: 0
Reputation: 47770
The same approach as you see in the Person
class will work here too:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):
Person(_name, _phoneNumber, _streetName, _streetNumber) {}
You can't initialize member variables of parent classes in C++. These are reasons for that
addr
member by whatever you pass to it.Upvotes: 2
Reputation: 258648
You can't set base members in derived class
initializer lists directly.
Officer(char* _name, char*_phoneNumber, char* _streetName,
int _streetNumber, double _salary):
Person(_name, _phoneNumber, _streetName, _streetNumber),
salary(_salary)
Upvotes: 5