我希望在每个派生类中对类成员进行不同的初始化。想象一下,我有一个Device
类型的对象。此Device
只是应用程序代码使用的接口,因为实际设备只是两种类型中的一种,DeviceA
或DeviceB
。所有设备都有一些共同的功能,例如名称。那应该是一个班级成员,不应该吗?所以我有:
class Device {
static std::string sm_name;
}
但每个家庭设备都有自己的名字。 如何将名称初始化为每个派生类的不同值?设计是否有误? name属性不应该是类成员吗?
答案 0 :(得分:5)
name属性不是类成员吗?
每个家庭设备最有可能拥有自己的私有静态成员。您可以使用虚方法在设备实例上返回正确的名称。
答案 1 :(得分:3)
为什么不只是有一个返回名称的虚拟成员函数,并在派生类中实现它以返回正确的名称?
e.g。
class A
{
public:
virtual std::string name() = 0;
};
class B : public A
{
public:
virtual std::string name() { return "typeB"; }
};
class C : public A
{
public:
virtual std::string name() { return "typeC"; }
};