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

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

Susan Sarandon
发布: 2024-12-05 04:20:10
原创
548 人浏览过

How Should Base Class Member Variables Be Initialized in Derived Class Constructors?

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

在面向对象编程中,继承允许派生类继承其属性和行为基类。然而,在派生类构造函数中初始化基类成员变量有时会带来挑战。

为什么基类成员变量不能在派生类构造函数中初始化?

考虑以下示例:

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 类可以直接初始化这些变量。

初始化最佳实践

为了解决这个问题,有一些推荐的方法:

  • 创建基类成员public: 一种方法是将基类成员变量设为 public,如下所示:
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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板