c++ - 程序反馈: named loop index and reference to constant data

标签 c++ c class coding-style

我有一个类作业,老师对我同意的很多事情进行了扣分,但其中有一些我不太确定。

“我不喜欢像 i 这样命名变量,而实际上计数器代表一个真实的东西,一个端口号:”

“最好将其称为 portNum 之类的名称。”

回应以下几行:

for(int i = 1; i <= boat.getLastPort(); ++i){
    boat.load();
    boat.move(i);
    boat.unload();
}

我的第一个问题是,这个建议是合理的,还是根本不值得?我很少看到命名循环变量。我认为大多数人会立即知道在这种情况下发生了什么(在程序其余部分的上下文中)。


第二次也是最后一次反馈:

“首先,方法名称需要以小写字母开头,而不是大写字母。这是 OOP 中非常严格的约定。但更糟糕的是,没有理由通过引用传递范围值。请求的值是返回,这就是方法通常如何相互协作的方式。” ---“......没有程序想要调用类方法并通过引用传递任何东西:你永远不会相信你的程序变量的类。在方法中使用按值传递。”

这个引用引用了这个成员函数:

int FerryBoat::Rand(const int& range)
{
    return rand() % (range+1);
}

赋值需要成员函数,否则我会创建一个宏来在类之外执行此操作。说明没有指定名称,所以我只是以库函数命名,但我想我应该随机命名,这样它的首字母就不会大写。

无论如何,我的第二个问题是:
如果函数引用常量数据(常量变量听起来很矛盾),您为什么不相信它?它不能因为常量而改变数据吗?

最佳答案

我会接受并继续前进 :-) 即使您的老师是边缘精神病患者,您的工作就是通过考试。离开学校后,您可以遵循自己的指导方针(如果他们更好的话)(当然要遵守公司的规章制度)。

我不得不同意自boat.move(portNum)以来的第一个观点。然后传达更多信息boat.move(i) .

更好的是boat.moveTo(portNum)甚至 boat.moveToPortNumber(i) .

如果这三行都存在,可能不好,但即使对于这么小的样本,“正确”完成它也不会花费太多。考虑到人们花在维护代码上的时间,代码的可读性越高越好。

第二个,我认为你的老师专注于错误的事情。不是它是否可以损坏,而是传递 int 绝对没有意义也没有优势。通过引用除非你在函数中修改它。

引用在 C++ 中很好地避免了在必须用指针模拟按引用传递时遇到的 C 问题,并最大限度地减少了大型结构的复制。事实上,我希望 ISO 将它们添加到下一个迭代中。但是,如果它是一个复制成本低的变量(如 int )并且您不想更改变量并将其反射(reflect)回调用者,那么引用就是浪费时间。

我非常不同意方法名称​​需要以小写字母开头。虽然这是一个通用约定(我自己实际使用的约定),但它不是 OOP 的要求。代码不会突然变得不那么面向对象,因为你的方法被称为 IsTeacherLoony()而不是 isTeacherLoony() .

关于c++ - 程序反馈: named loop index and reference to constant data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444632/

相关文章:

c - 编译驱动程序时出错 - 初始化程序中指定的未知字段

ios - 如何编写一个关于如何在 Swift 5 中使用委托(delegate)的简单示例

ruby-on-rails - 通过启用 cache_classes = true 手动重新加载已为 'cached' 的 Rails 类

c++ - Linux 中的库链接

c - 实现 C#include 指令的内部处理

c++ - 将数据从txt文件复制到C++中的char指针

c++ - 较大矩阵的子矩阵之和

C++ 进程因状态 3 混淆而终止

c++ - regsvr32 导致 CDatabase destrucor 在使用 SQL Native Client (v2005) 时挂起

c++命名空间最佳实践困境