我制作了这个程序来更好地了解继承。
现在我已经处于基本水平,但这不是一个问题,但是我可以看到将来会出现这种情况,所以我想问问最好的方法是让用户插入矩形的宽度和高度(在这种情况下)。
我提供的代码包括简单的方法,只需询问用户并将数字插入变量中,然后将变量传递给对象( 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次 -是的,我是一个初学者,在这里和编码
答案 0 :(得分:0)
您很高兴看到潜在的问题。但是,您解决这些问题的方法本身就是有问题的。
您正在考虑“询问用户并[对数据结构做点事情]”。代码的这一部分是将用户界面连接到数据结构的粘合剂。它应该是设计的 last 部分,而不是第一部分。 首先分别设计用户界面和数据结构。 (警告:请不要根据可能发生的情况进行过度设计。如果未来不确定,请不要牺牲现在的内容。易于修改代码;请勿尝试编写代码永远不需要修改。)
设计理想的用户界面,而不用考虑如何实现它。有理想的奋斗目标之后,您可以弄清楚如何实现它。不必担心您将如何执行用户触发的操作;着重于从用户那里获得这些触发。例如,您可以提供一种输入高度和宽度的方法,而不必担心如何将这些值传递给形状。 (如果您正在编写代码或伪代码,则此处将有一个空白需要稍后填充。)您可能需要对理想进行一些折衷,尤其是在刚开始时。发生这种情况。
根据需要的功能设计数据结构。这部分基于您所需的用户界面,但重点在于功能而不是如何触发该功能。使结构易于使用,但不必担心如何从界面访问它们。
然后,在草拟了界面和数据结构之后,请弄清楚您希望它们如何协同工作。您可能会发现您想要向数据结构添加新功能,只要您遵守设计原则就可以了。 (也许每个类都应该有一个static
方法来提示用户输入并产生一个对象。不过,这可能会将某些接口代码转换为类代码,因此请考虑周全和一致。)您可能会发现您想要修改接口,只要增益大于损耗就可以了。有时,为了让实体相处需要折衷,但是应该允许每个折衷者维护其核心完整性。
为用户设计界面。设计功能的结构。最后设计胶水。