C++ 派生类的构造函数,其中基类包含类成员
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++ 中初始化父类的成员变量。这些是原因
- 它会破坏封装,OOP 的想法是,你可以对一个类做的每一件事都可以通过它的接口访问(在这种情况下,初始化将由构造函数完成(。请注意,这与父类的代码一致,它将很高兴通过您传递给它的任何内容来初始化
addr
成员。 - 在 C++ 中有一个初始化顺序,它指定首先初始化父级,父级(与任何类一样(在运行其构造函数代码之前初始化其成员变量。没有地方让从子级"注入"> 初始化来运行
- 确保初始化运行一次且仅运行一次会出现问题。这将是一场噩梦跟踪,孩子想要(或已经(初始化一些成员本身
你可以像这样调用构造函数:
官员(字符* _name, 字符*_phoneNumber, 字符* _streetName, 国际_streetNumber, 双_salary(:Person(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber(,salary(salary({}
首先,
您需要知道军官也是一个人。意味着您必须为亲自完成的军官做所有事情.
因此,您的官员构造函数应在内部调用 Person 的构造函数,如下所示:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber)
现在,您还必须构造构造函数变为 salary.so 的值:
Officer(char* _name, char*_phoneNumber, char* _streetName, int _streetNumber, double _salary):Person(_name, _phoneNumber, _streetName, _streetNumber),salary(_salary)
{}
相关文章:
- std::具有相同基类的类的变体
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如果基类包含双指针成员,则派生类的构造函数
- C++ 不能使用与私有基相同的类
- 如何在从抽象基派生的类中实现相同的方法?
- C++ .h 包含从一个类传递到另一个类的类和.cpp
- 指向基类派生类的 std::unique_ptr 的指针
- 如果类包含基类的成员,编译器是否可以利用空基优化?
- 如果类包含基类类型的成员作为第一个元素,后跟其他成员,编译器是否可以优化空基?
- 如果派生类包含其他方法和成员,则可以static_cast从基类到派生类
- 如何让子类包含指向基类的指针
- 类包含指向基类的指针,但我不希望它。(C++)
- C++ 派生类的构造函数,其中基类包含类成员
- C++ 使用包含不同类型功能对象的基和派生类的 Reactor
- 派生类包含指向基类对象的指针时的析构函数
- 如果基类包含数组成员,则派生类的构造函数不能是constexpr
- 使用多态基类(包含虚函数)访问数组元素时的类型
- 包含基类/派生类对象的c++数组
- 子类包含基类使用的静态成员
- c++基类包含派生类的实例