关于网友提出的“ 这种情况应该如何设计?”问题疑问,本网通过在网上对“ 这种情况应该如何设计?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 这种情况应该如何设计?
描述: 现有父类Animal,子类Bird,Cat,Dog。
我想使用一个string字段description,用来描述Bird,Cat,Dog整个类的性质,例如Cat.description == "cats are very cute" 这样
显然,这个字段与对象无关,与整个类有关,因此应该是静态常量;另外,由于我希望这所有Animal都具有各自的description,因此这个字段应该在Animal类中被声明
但是,如果Bird,Cat,Dog类继承了Animal类、且description为静态的话,那么它们不就共享了description了吗?我凌乱了。。。
另外,这个子类继承了的静态常量,应该在哪里初始化?由于是静态的,只需要赋一次值即可,放在构造函数里想必不合适;我也不想直接写在程序里面
所以这个description的描述符应该是如何呢?
解决方案1: 不要用类静态成员来实现这个功能
应该用虚函数模拟静态成员的办法
例如
class Animal
{
public:
virtual string& desc()
{
static string desc_str = "animal";
}
};
class Dog : public Animal
{
virtual string& desc()
{
static string desc_str = "dog";
}
};
解决方案2: 没有必要放在基类, 静态属性(类的属性)不是动态绑定的
#include
struct Animal {
virtual ~Animal (){}
};
struct Cat : public Animal
{
static char const* desc()
{
return "cats are cute";
}
};
struct Dog : public Animal
{
static char const* desc()
{
return "dogs are also cute";
}
};
int main()
{
std::cout << Dog::desc() << std::endl
<< Cat::desc() << std::endl;
}
以上介绍了“ 这种情况应该如何设计?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3637167.html