如何在派生类中初始化静态成员?

时间:2011-04-04 15:33:29

标签: c++ inheritance static

好吧,显然,我做不到。但那是我的问题。也许这是一个设计问题,我弄错了。

我希望在每个派生类中对类成员进行不同的初始化。想象一下,我有一个Device类型的对象。此Device只是应用程序代码使用的接口,因为实际设备只是两种类型中的一种,DeviceADeviceB。所有设备都有一些共同的功能,例如名称。那应该是一个班级成员,不应该吗?所以我有:

class Device {
    static std::string sm_name;
}

但每个家庭设备都有自己的名字。 如何将名称初始化为每个派生类的不同值?设计是否有误? name属性不应该是类成员吗?

2 个答案:

答案 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"; }
};