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