如何初始化派生类中的静态成员?
Posted
技术标签:
【中文标题】如何初始化派生类中的静态成员?【英文标题】:How to initialize static members in derived classes? 【发布时间】:2011-04-04 15:33:29 【问题描述】:好吧,显然,我不能。但这是我的问题。也许这是一个设计问题,我搞错了。
我希望在每个派生类中以不同方式初始化一个类成员。想象一下我有一个Device
类型的对象。这个Device
只是应用程序代码使用的一个接口,因为实际的设备只是DeviceA
或DeviceB
这两种类型之一。所有设备都有一些共同的功能,例如名称。那应该是班级成员,不是吗?所以我有:
class Device
static std::string sm_name;
但每个家庭设备都有自己的名称。 如何将每个派生类的名称初始化为不同的值? 设计是否错误? name 属性不应该是类成员吗?
【问题讨论】:
Are static variables in a base class shared by all derived classes? 的可能重复项 哎哟!我应该更仔细地阅读答案O:) 【参考方案1】:name 属性不应该是类成员吗?
每个家庭设备都应该有自己的私有静态成员。您可以使用虚拟方法在设备实例上返回正确的名称。
【讨论】:
好吧,我明白了,除了让每个派生类定义自己的成员之外别无选择。【参考方案2】:为什么不只是有一个返回名称的虚成员函数,并在派生类中实现它以返回正确的名称?
例如
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";
;
【讨论】:
不过,您会希望函数是虚拟的。为了安全起见,A
s 析构函数应该是虚拟的或受保护的。
对不起,我匆忙错过了虚拟:-(以上是关于如何初始化派生类中的静态成员?的主要内容,如果未能解决你的问题,请参考以下文章