您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 这种情况应该如何设计?

这种情况应该如何设计?

来源:网络整理     时间:2016/8/28 16:39:12     关键词:

关于网友提出的“ 这种情况应该如何设计?”问题疑问,本网通过在网上对“ 这种情况应该如何设计?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 这种情况应该如何设计?
描述:

现有父类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

相关图片

相关文章