继承(基本级别)是询问用户宽度和高度的最佳方法是什么? (形状示例)

时间:2019-12-13 14:26:54

标签: c++ inheritance shapes

我制作了这个程序来更好地了解继承。

现在我已经处于基本水平,但这不是一个问题,但是我可以看到将来会出现这种情况,所以我想问问最好的方法是让用户插入矩形的宽度和高度(在这种情况下)。

我提供的代码包括简单的方法,只需询问用户并将数字插入变量中,然后将变量传递给对象( rect1 )中的设置器即可。

我认为当我添加更多形状时,这会变得有些混乱,是否有更好的方法可以要求用户输入数字?

main.cpp:

int main() {
    Rectangle rect1;
    int width, height;

    std::cout << "Insert the width of the rectangle: ";
    std::cin >> width;

    std::cout << "Insert the height of the rectangle: ";
    std::cin >>height;

    rect1.setHeight(height);
    rect1.setWidth(width);

    std::cout << "The area of the rectangle is: " << rect1.getArea() << std::endl;


    std::cout << "Drawing: " << std::endl;
    std::cout << " ";
    for (int i = 0; i < width+1; ++i) {
        std::cout << "-";
    }
    std::cout << std::endl;
    for (int j = 0; j < (height+1)/2; ++j) { // divided by 2 to have a better proportion
        std::cout << "|";
        for (int i = 0; i < width+1; ++i) {
            std::cout << " ";
        }
        std::cout << "|";
        std::cout << std::endl;
    }
    std::cout << " ";
    for (int i = 0; i < width+1; ++i) {
        std::cout << "-";
    }

    return 0;
}

Shape.h:

class Shape {
public:
    int getWidth() const {
        return width;
    }

    void setWidth(int width) {
        Shape::width = width;
    }

    int getHeight() const {
        return height;
    }

    void setHeight(int height) {
        Shape::height = height;
    }

protected:
    int width, height;
};

Rectangle.h:

class Rectangle: public Shape {
public:
    int getArea(){
        return width*height;
    }
};

例如,我正在考虑创建另一种称为“ askHeight”的方法,该方法与设置器相同,只不过其中已经包含 cout cin

谢谢大家! :)

META P.S. 我之前已经在这里问过,没有人回答我应该在Code Review上问,所以我做到了,删除了旧问题。 他们在代码审查中说,我应该在这里提出问题。 我将问题留在了Code Review上,并再次要求在这里查看我可以从哪个答案中获得答案。 和: -是的,我阅读了所有指南 -是的,我尝试问过3次 -是的,我是一个初学者,在这里和编码

1 个答案:

答案 0 :(得分:0)

您很高兴看到潜在的问题。但是,您解决这些问题的方法本身就是有问题的。

您正在考虑“询问用户并[对数据结构做点事情]”。代码的这一部分是将用户界面连接到数据结构的粘合剂。它应该是设计的 last 部分,而不是第一部分。 首先分别设计用户界面和数据结构。 (警告:请不要根据可能发生的情况进行过度设计。如果未来不确定,请不要牺牲现在的内容。易于修改代码;请勿尝试编写代码永远不需要修改。)

设计理想的用户界面,而不用考虑如何实现它。有理想的奋斗目标之后,您可以弄清楚如何实现它。不必担心您将如何执行用户触发的操作;着重于从用户那里获得这些触发。例如,您可以提供一种输入高度和宽度的方法,而不必担心如何将这些值传递给形状。 (如果您正在编写代码或伪代码,则此处将有一个空白需要稍后填充。)您可能需要对理想进行一些折衷,尤其是在刚开始时。发生这种情况。

根据需要的功能设计数据结构。这部分基于您所需的用户界面,但重点在于功能而不是如何触发该功能。使结构易于使用,但不必担心如何从界面访问它们。

然后,在草拟了界面和数据结构之后,请弄清楚您希望它们如何协同工作。您可能会发现您想要向数据结构添加新功能,只要您遵守设计原则就可以了。 (也许每个类都应该有一个static方法来提示用户输入并产生一个对象。不过,这可能会将某些接口代码转换为类代码,因此请考虑周全和一致。)您可能会发现您想要修改接口,只要增益大于损耗就可以了。有时,为了让实体相处需要折衷,但是应该允许每个折衷者维护其核心完整性。

为用户设计界面。设计功能的结构。最后设计胶水。