提问人:kristof 提问时间:8/4/2023 更新时间:8/4/2023 访问量:38
在派生类的初始值设定项列表中包括基类变量
Including base class variables in the initializer list in the derived class
问:
我的项目是创建潜水日志。 有 DiveInfo 基类和 Equipment 派生类。 设备可能会因潜水而异,因此显然它需要根据用户给定的数据获取特定潜水的变量。
这是 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 notes)。 问题是,我是否必须在 Equipment.h 构造函数的初始值设定项列表中包含 DiveInfo 的变量? 这可能也是一个大胆的问题,但这不能用一些虚拟功能或一些模板来完成吗?还是会使事情完全复杂化?
答:
4赞
Some programmer dude
8/4/2023
#1
每个类都应该初始化自身,并且只初始化自身。它应该让父类进行自己的初始化。
为此,在构造函数初始值设定项列表中,第一件事是“调用”基类构造函数。
举个简单的例子:
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
评论