【发布时间】:2016-04-24 22:20:19
【问题描述】:
我正在教授一门 c++ 课程,在其中一个项目中,要求学生编写机器人类的代码。
Robot 构造函数是固定的,实例是从学生无法修改的函数创建的。但是,课程设计的其余部分留作练习。
我想确保机器人实例不能轻易地在彼此之间共享信息。如果学生想要共享信息,他可以创建类的静态成员或在类的实现中使用静态变量来存储有关每个实例的信息。 可能还有其他方法可以利用该语言“作弊”(例如写入文件、使用套接字……)。
有没有办法检查这种滥用(例如静态成员的存在)?在这一点上,我愿意接受任何建议。 我是否应该考虑完全重新设计,以便每个实例“生活在一个完全不同的世界中”,从而阻止它们相互通信? 这是一个根本不可能预防的问题吗?我是否应该警告他们这种行为的严重影响?
谢谢。
编辑: 我问这个问题的原因不是为了减轻评分。我计划创建一个自动化平台,学生可以在其中提交代码并让他们相互竞争。在这种情况下,我将无法在发布代码之前阅读和验证代码。 我想防止“容易”的滥用(例如静态成员),并认为更多涉及的滥用不会那么普遍。
因此我的问题真的是:有没有办法以编程方式阻止学生拥有静态成员(模板黑客或其他东西),或者我应该重新设计课程。谢谢
【问题讨论】:
-
grep static code.cpp -
是的,我已经想到了这个:)
-
对类成员的访问控制在类级别,而不是单个对象。由于您正在教授这门课程,因此只需声明如果学生使用非静态成员以外的任何东西在
Robot的实例之间进行通信,他们将被打分。当然,这需要您检查代码,而不是简单地自动检查代码。 -
还有其他方法可以在没有静态成员的情况下共享数据。如果你在代码中找到
std::shared_ptr, or a common base class,你也会降级吗? -
是的,公共基础是另一种不被容忍的信息共享方式。我不确定如何使用 shared_ptr 来实现这一点?除非与一些静态变量结合使用,否则每个实例都不会知道其他实例。能详细点吗?