首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++基础架构设计

C++基础架构设计
EN

Stack Overflow用户
提问于 2018-04-05 15:09:52
回答 1查看 77关注 0票数 0

我不确定正确的决定,所以我问社区:

所以问题是:是通过类型还是通过属性来建模属性更好,还是有第三种方法呢?

假设我们有两个球-红色和蓝色,我必须用它们做点什么。所以第一个想法是:

代码语言:javascript
复制
    struct Ball
    {
        RGB color;
    };

    void food( Ball& ball)
    {
        if ball.color == RED ....
        if ball.color == BLUE ....
    }

我想你明白了。但是我想去掉if(..)

代码语言:javascript
复制
    struct Ball
    { 
        virtual RGB color() = 0;
    }

    struct RedBall : public Ball
    {
        RGB color() { return( RED); }
    };

    struct BlueBall : public Ball
    {
        RGB color() { return( BLUE); }
    };

    void foo( RedBall&) ...
    void foo( BlueBall&) ....

我不确定创建新类型(通过继承或使用装饰器)来描述程序流和行为是否是正确的方式,因为这可能很快导致巨大的类层次结构。

如果我考虑将这些类型与访问者模式一起使用,尤其是对于装饰类型,情况会变得更糟。这里我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-04-05 15:29:03

拥有多个版本的foo,采用不同颜色的Ball似乎是完全错误的。我会争辩说,如果你想这样做,你可能需要在Ball中有一个成员函数,它可以为不同颜色的球做foo所做的任何事情。

您可以选择将其实现为一个虚函数并具有表示每种颜色的派生类,或者具有一组if语句,这些语句现在位于Ball类的内部,因此对其他类是“隐藏的”。

面向对象的思想是让对象“做事情”,而不仅仅是属性的持有者(本例中是颜色),所以解决这个问题的“最正确”的方法是让类本身知道那种对象应该做什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49666203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档