c++ 在派生类的初始化器列表中包含基类变量

js5cn81o  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(86)

我的项目是创建一个潜水日志。有DiveInfo基类和Equipment派生类。该设备可能会改变从潜水到潜水,所以显然它需要得到的变量为特定的潜水,根据给定的数据由用户。
这是设备。h:

#pragma once
#include "DiveInfo.h"
#include <string>

class Equipment : public DiveInfo
//manage and capture information about the diving equip
{
private:    
    std::string equipmentCondition;
    std::string equipmentType;
    std::string maskType;
    double tankSize;

public:
    Equipment(const std::string& diveSiteName, int depth, int duration, double waterTemperature, double visibility, const std::string& notes,
              const std::string& equipmentCondition, const std::string& equipmentType, const std::string& maskType, double tankSize);
    
    std::string getEquipmentType() const;
    std::string getEquipmentCondition() const;
    double getTankSizeI() const;
    double getSac() const;
};

字符串
我已经在DiveInfo中为这些变量创建了一个构造函数(来自diveSiteNames的til注解)。问题是,是否必须在Equipment.h构造函数的初始化器列表中包含DiveInfo的变量?这可能也是一个大胆的问题,但是这不能用一些虚拟函数或一些模板来完成吗?还是会把事情完全复杂化?

k75qkfdt

k75qkfdt1#

每个类都应该初始化自己,并且只初始化自己。它应该让父类完成自己的初始化。
要做到这一点,首先在构造函数初始化列表中“调用”基类构造函数。
举个简单的例子:

struct base
{
    int value;

    base(int val)
        : value{ val }
    {
    }
};

struct derived : base
{
    std::string string;

    derived(int val, std::string const& str)
        : base{ val }, string{ str }
    {
    }
};

字符串
derived构造函数初始化器列表首先调用base类构造函数进行初始化,然后是derived成员初始化。

相关问题