我的同伴告诉我,我实施以下方式是一种危险的做法。我在main方法和函数中为变量添加了相同的名称。我的意思是只要它有效,是不是没问题? 你会怎么做不同的?
感谢。
#include <iostream>
#include <string>
#include <sstream>
#include "Three.h"
Three::Three(void)
{
}
Three::~Three(void)
{
}
void Three::rect (int& ar, int&vl, int len, int wid, int hgt)
{
ar = (len * wid) * 2 + (len+wid) * 2 * hgt;
vl = len * wid * hgt;
cout << "Area is " << ar << " square feet that contains " << vl << " cubic feet." << endl;
}
char qt;
int main (int, char**)
{
int len = 0;
int wid = 0;
int hgt = 0;
int ar = 0;
int vl = 0;
do
{
cout << "Length of House (ft): " << endl;
std::cin >> len;
cout << "Width of House (ft): " << endl;
std::cin >> wid;
cout << "Height of House (ft): " << endl;
std::cin >> hgt;
Three three;
three.rect (ar, vl, len, wid, hgt);
cout << "q, to quit" << endl; //My own quit statement
std::cin >> qt;
}
while (qt != 'q');
}
答案 0 :(得分:7)
只要它有效,是不是可以?一般来说不是一个好的口头禅(特别是在C / C ++中,有很多看似有效的未定义行为的空间),但是这种情况我认为没有错。
如果你有一个本地变量隐藏全局和类似的东西,可能会有一些混淆的可能性,但是这里没有什么 - 这个参数碰巧与通过它传递的参数的名称相同令人困惑,而不是“危险”。
答案 1 :(得分:4)
这种做法绝对没有错。您的代码有一些小问题,但在两个函数中使用相同的变量名称不是其中之一。
答案 2 :(得分:1)
如果你在类函数和类本身中使用相同的变量名,他可能意味着它是“危险的”,因为这会导致错误。这不是这里的情况,代码很好。
答案 3 :(得分:1)
您的代码中更危险的做法是您从std::cin
读取而不检查是否有任何读取失败。如果有的话,您将无限期地等待qt
成为'q'
。
此外,仅使用cout
表示您可能在using namespace std;
中有Three.h
,这不是推荐的做法。 (或许它只有using std::cout;
才能明确限定std::cin
?)
答案 4 :(得分:0)
可以做到这一点。但请记住为变量提供更好的名称。例如,将wid
重命名为Width
。通常我更喜欢将函数的输入参数写为in_Width
。这样我们就知道它是当前函数的输入。当你开始写大项目时,这些事情都很重要。 :)总是试着做好准备。
您输入时需要一些时间。但是在审查或调试时,它可以避免许多麻烦。另一方面,它没有其他重大缺点。