c++ - 继承(基本级别)询问用户宽度和高度的最佳方式是什么?(形状示例)
问题描述
我制作这个程序是为了更好地理解继承。
现在我处于这个基本级别,这并不是一个真正的问题,但我可以看到未来会出现这种情况,所以我问什么是要求用户插入矩形的宽度和高度的最佳方法(在这种情况下)。
我提供的代码包括简单的方法,只需询问用户并将数字插入变量中,然后将变量传递给对象(rect1)内的设置器。
我想当我添加更多形状时,这可能会变得有点混乱,有没有更好的方法可以让用户输入数字?
主.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;
}
形状.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;
};
矩形.h:
class Rectangle: public Shape {
public:
int getArea(){
return width*height;
}
};
例如,我正在考虑创建另一个名为“askHeight”的方法,它与 setter 相同,只是它内部已经有cout和cin。
谢谢大家!:)
META PS 我之前已经在这里问过,没有任何答案有人说我应该在 Code Review 上问,所以我这样做了,删除了旧问题。在 Code Review 上,他们说我应该在这里问。我在 Code Review 上留下了这个问题,然后在这里再次询问,看看我可以在哪一个中得到答案。并且:-是的,我阅读了所有指南-是的,我尝试问了 3 次-是的,我是初学者,在这里和编码
解决方案
您正在寻找潜在的问题,这很好。但是,您解决这些问题的方法本身就有问题。
您正在考虑“询问用户并[对数据结构做某事]”。这部分代码是将用户界面连接到数据结构的粘合剂。它应该是你设计的最后一部分,而不是第一部分。首先分别设计您的用户界面和数据结构。(警告:不要根据可能发生的事情进行过度设计。如果未来不确定,不要牺牲现在。让修改代码变得容易;不要尝试编写永远不需要修改的代码。)
设计一个理想的用户界面,而不考虑如何实现它。在你有一个要努力的理想之后,你可以弄清楚你将如何实现它。不用担心如何执行用户触发的操作;专注于从用户那里获得这些触发器。例如,您可以提供一种输入高度和宽度的方法,而无需考虑如何将这些值传递给形状。(如果您正在编写代码或伪代码,这里会有一个空白需要稍后填补。)您可能需要稍微妥协一下理想,尤其是在您刚开始的时候。有时候是这样的。
根据您需要的功能设计数据结构。这部分基于您想要的用户界面,但关注功能而不是如何触发该功能。使结构易于使用,但不要担心如何从界面访问它们。
然后,在你勾画出接口和数据结构之后,弄清楚你希望它们如何协同工作。你可能会发现你想在数据结构中添加新的功能,只要你坚持你的设计原则就可以了。(也许每个类都应该有一个static
方法来提示用户输入并生成一个对象。不过,这可能会将一些接口代码转换为类代码,所以要深思熟虑并保持一致。)您可能会发现您想要修改接口,即只要收益大于损失就可以。有时实体需要妥协才能相处,但应该允许每个实体保持其核心完整性。
为用户设计界面。设计功能的结构。最后设计胶水。
推荐阅读
- visual-studio-code - vscode 在 Linux 中以不同用户身份运行
- windows - 计算第二天时间跨度的数学函数
- android - AdMob 网络请求突然降至 0
- ios - React-native Axios status code response 0 (Skipped) 当app在后台收到响应时
- c# - FSX 用户设计面板 L:var Get/Set
- mediawiki - GROUP BY like #ask query in semantic-mediawiki
- android - 带有孔的多边形在高缩放时行为不正确(消失)
- javascript - addEventlistener() 不执行函数
- c++ - 如何在 sql 查询中传递 C++ 变量
- firebase - 如何使用 GCP 对应用进行身份验证?