C ++:定义类的最大/最小限制

时间:2010-05-20 17:25:05

标签: c++ constants limits

我创建了一个按可变粒度日常计划建模时隙的类,例如,第一个时段是30分钟,但第二个时段可以是40分钟,第一个可用时段从(值相当于1。

我现在要做的是以某种方式定义此课程所允许的最大和最小允许值,并且我有两个实际问题:

1.-以这种方式为自定义类定义绝对最小值和最大值是否有意义?或者更好的是,在给定类定义的关系运算符的情况下,值始终比较为低于任何其他可能的类型值的值是否足够? (并且类似于最大值)

2.-假设上一个问题的答案是在“是”之后建模的(或“是但是......”),如何定义这样的最大/分钟?我知道有std::numeric_limits<>,但从我读到的内容是“数字类型”。我是否将其解释为“表示为数字”或者我可以做出更广泛的假设,例如“用数字表示”或“与整数对应”?毕竟,定义日期类的最小值和最大值是有意义的,也许对于字典类,但numeric_limits可能不适用于那些用途(我没有太多的经验)。另外,numeric_limits有很多额外的成员和信息,我不知道该怎么做。如果我使用numeric_limits,C ++提供了哪些其他众所周知/广泛使用的机制来指示类的可用值范围?

3 个答案:

答案 0 :(得分:2)

无法理解你的问题。我认为你所问的是,对类的领域(可以提供给它并且有意义的数据)的自信是否有意义,如果是,那么如何自信。

第一个有一个非常明确的答案:是的,绝对的。你希望你的班级成为“......正确使用且难以正确使用”。这包括确保在他们做错事时告诉班级的客户。

第二个答案不太明确。大多数情况下,您只想使用assert()函数来断言函数或类的域。其他时候你会想要抛出异常。有时你想做两件事。当性能成为问题时,有时您希望提供既不会出现问题的界面。通常,您希望提供一个至少可以进行检查的界面,以便客户端可以在尝试将其输入您的类或函数之前判断有效/无效输入是什么。

你可能想要断言和抛出的原因是因为抛出异常会破坏堆栈信息并且可能使调试变得困难,但断言仅在构建期间发生并且实际上没有做任何事情来保护您不运行计算或执行可能导致崩溃或数据无效。因此断言然后抛出通常是最好的答案,以便您在测试时遇到它时可以进行调试,但是当这些错误进入架子时仍能保护用户。

对于您的课程,您可以考虑几种方法来提供最小/最大。一种是在类的界面中提供最小/最大功能。另一个可能是使用外部功能,是的,numeric_limits可能只是因为范围有时是一种数字量。您甚至可以提供一个更通用的接口,在您的类中具有validate_input()函数,以便您可以进行任何适当的比较。

你的问题的第二部分有很多有效的答案,取决于很多变量,包括个人品味。

答案 1 :(得分:2)

作为日程安排/广告位代码的设计者,您需要多少灵活性/实用性。

两种简单的方法是在该类中定义自己的值

const long MIN_SLOT = 1;
const long MAX_SLOT = 999; // for example

或者定义另一个包含定义的类

class SchedLimits{

public:
const static long MIN_SLOT = 1;
const static long MAX_SLOT = 999;
}

最简单的就是枚举。 (我感谢那些提醒我的评论者)

enum {MIN_SLOT = 1, MAX_SLOT = 999};

答案 2 :(得分:1)

只需创建一些反映最小值和最大值的const静态成员。