派生类构造函数中基类成员变量的初始化
在面向对象编程中,继承允许派生类继承其属性和行为基类。然而,在派生类构造函数中初始化基类成员变量有时会带来挑战。
为什么基类成员变量不能在派生类构造函数中初始化?
考虑以下示例:
class A { public: int a, b; }; class B : public A { B() : A(), a(0), b(0) { } };
在此代码中,类 B 尝试初始化基类成员变量 a 和b 在其自己的构造函数中,使用语法:A()、a(0)、b(0)。然而,这种做法是不正确的。原因是 a 和 b 不是 B 类的成员,而是 A 类的成员。只有 A 类可以直接初始化这些变量。
初始化最佳实践
为了解决这个问题,有一些推荐的方法:
class A { public: int a, b; }; class B : public A { B() : a(0), b(0) { } };
但是,不建议将成员变量设为 public,因为它违反了以下原则:封装性和安全性。
class A { protected: A(int a, int b) : a(a), b(b) {} // Accessible to derived classes private: int a, b; // Keep these variables private in A }; class B : public A { public: B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0. { } };
此方法使派生类能够通过使用所需初始值调用基类构造函数来初始化基类成员变量。
以上是基类的成员变量应该如何在派生类的构造函数中初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!