[英]C++ Constructor for derived class where base class contain a class member
给定此代码
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): .... ????
}
如何编写具有五个输入变量的派生类Officer的构造函数,其中_streetName和_streetNumber将被馈送到基类Person中包含的成员对象addr中?
您不能直接在派生class
初始化器列表中设置基本成员。
Officer(char* _name, char*_phoneNumber, char* _streetName,
int _streetNumber, double _salary):
Person(_name, _phoneNumber, _streetName, _streetNumber),
salary(_salary)
您在Person
类中看到的相同方法也可以在这里使用:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):
Person(_name, _phoneNumber, _streetName, _streetNumber) {}
您无法在C ++中初始化父类的成员变量。 这些是原因
addr
成员。 您可以这样调用构造函数:
人员(char * _name,char * _phoneNumber,char * _streetName,int _streetNumber,双_salary):人员(char * _name,char * _phoneNumber,char * _streetName,int _streetNumber),薪水(薪水){}
首先,您需要知道军官也是一个人。 意味着您必须为亲自完成的军官做所有的事情。
因此您的官员构造函数应在内部调用人员的构造函数,如下所示:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber)
现在您还必须构造薪水的值,因此您的构造函数将变为:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber),salary(_salary)
{}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.