这是在创建派生类对象时初始化基类成员的更好方法

Which is the better approach to initialise the base class member while creating derive class object?

本文关键字:基类 初始化 成员 方法 更好 对象 创建 派生      更新时间:2023-10-16

方法1:通过派生类的构造函数初始化

class base {
protected:
    int no;
public:
    void showData() {
        cout << no;
    }
};
class der : public base {
public:
    der(int _no) {
        no = _no;
    }
};

方法2:通过基类

的构造函数初始化
class base {
    int no;
protected:
    base(int _no) : no(_no){}
public:
    void showData() {
        cout << no;
    }
};
class der : public base {
public:
    der(int _no) : base(_no) {
    }
};
客户机代码:

der d(10);
d.showData();

请告诉我是否有其他方法

您应该使用第二种方法,原因之一是:如果基类成员是private,方法一将不起作用。派生类初始化不属于它的东西也是很奇怪的。

每个类元素都应该初始化该类中的字段。所以第二个变体。

由于各种原因,显然第二个选择是:

  • 让类的构造函数完成它的任务:Construction。让每个类初始化自己的数据成员。
  • 数据成员可以是私有的,派生类不能访问。
  • 选项1将涉及所有派生类的代码维护,这肯定会导致错误。
  • 选项1就封装而言不是一个好方法。

我强烈选择方法2,因为构造函数也可能比仅仅初始化变量更复杂。case中的private成员不能在der中设置

第二种是正确的方法。用构造函数初始化总是最好的,这就是构造函数的作用。如果你有一个以上的派生类,你会怎么做?如果想自己创建基类对象该怎么办?把初始化代码放在构造函数中,这就是c++的工作原理。

总是使用变量初始化器来初始化事物。因为这是你唯一可以初始化东西的地方。在任何地方写no=no_赋给给一个已经初始化的变量。对于udt,这可能是一个很大的区别,对于引用,这甚至是不可能的,您总是必须初始化它们。

所以为了一致性,在所有地方都使用大写字母