派生类构造函数中基类成员变量的初始化
在面向对象编程中,类之间存在继承关系是很常见的。构造派生类时,必须正确初始化从其基类继承的成员变量。但是,尝试直接在派生类构造函数中初始化基类成员可能会导致错误。
考虑以下代码示例:
class A { public: int a, b; }; class B : public A { public: B() : A(), a(0), b(0) { } };
尝试编译此代码时,将导致错误,因为派生类构造函数无法直接初始化基类的成员。这是因为派生类无法访问基类成员。
要解决此问题,您应该在基类中创建一个构造函数,允许派生类初始化继承的成员。下面修改后的代码说明了这种方法:
class A { protected: A(int a, int b) : a(a), b(b) {} private: int a, b; }; class B : public A { public: B() : A(0, 0) { } };
现在,派生类 B 可以通过调用基类 A 的构造函数来初始化继承的成员 a 和 b。通过将 A 中的构造函数声明为 protected,它可以被派生类访问,但不能被继承层次结构之外的其他类访问。或者,您可以将 A 构造函数声明为公共以允许外部实例化。
通过使用这种方法,您可以确保继承成员的正确初始化,同时保持封装并防止从类外部直接访问私有变量。
以上是基类成员变量应该如何在派生类构造函数中初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!