首页 >后端开发 >C++ >如何在派生类构造函数中正确初始化基类成员变量?

如何在派生类构造函数中正确初始化基类成员变量?

Barbara Streisand
Barbara Streisand原创
2024-12-10 21:54:12261浏览

How to Properly Initialize Base Class Member Variables in a Derived Class Constructor?

派生类构造函数中基类成员变量的初始化

在处理类继承时,会出现一个常见问题:如何初始化基类派生类构造函数中的成员变量。最初尝试这样做可能会导致混乱,如下所示:

class A {
public:
    int a, b;
};

class B : public A {
    B() : A(), a(0), b(0) {
    }
};

此代码无法编译,引发问题:为什么我们不能在 B 中初始化 a 和 b?

原因在于a和b不是B的成员,它们属于基类A。只有A可以初始化自己的成员变量。

一种可能的解决方案是将 a 和 b 设为 A 的公共成员,允许 B 直接赋值。但是,不建议这样做,因为它破坏了封装原则。

相反,更稳健的方法是在 A 中定义一个构造函数,允许派生类指定初始化值。这可以通过使构造函数受保护并可供子类访问来实现:

class A {
protected:
    A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
private:
    int a, b; // Keep variables private within A
};

class B : public A {
public:
    B() : A(0, 0) // Calls A's constructor, setting a and b to 0 within A
    {
    }
};

此解决方案确保 a 和 b 在 A 中正确初始化,保证数据完整性和封装。

以上是如何在派生类构造函数中正确初始化基类成员变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn