我在一个类中有两个C ++函数:
void Attribute::setIndex(int inIndex) {
if (inIndex < 0) {
index = 0;
}
else if (inIndex >= MAX_NUM_ATTRIBUTES) {
index = MAX_NUM_ATTRIBUTES - 1;
}
else {
index = inIndex;
}
}
和
int Attribute::getValueWithinRange(int value) {
value = setIndex(value);
return value;
}
第二个函数应该使用setIndex将'value'设置为正确的数字并返回它。但是,由于第一个函数是一个void函数,我不能简单地按照我上面的方式传递值。我应该通过参考传递还是有任何建议?非常感谢你。
答案 0 :(得分:1)
我想要注意的是,如果你正在学习C ++,你应该首先尝试学习模型案例,有时候匆忙的例子不是最好的方法,但我们去了:
将setIndex更改为return int,my favorite;
int Attribute::setIndex(int inIndex)
{
if (inIndex < 0)
{
index = 0;
}
else if (inIndex >= MAX_NUM_ATTRIBUTES)
{
index = MAX_NUM_ATTRIBUTES - 1;
}
else
{
index = inIndex;
}
return index;
}
int Attribute::getValueWithinRange(int value)
{
value = setIndex(value);
return value;
}
将getValueWithinRange更改为返回索引,两个方法都在一个类中,它们共享对索引的访问权;
int Attribute::getValueWithinRange(int value)
{
setIndex(value);
return index;
}
给它引用会起作用,但除非使用技巧,否则你不能将引用设置为null,并且它会不必要地使用另一个方法,所以指针使它不那么混乱:
int Attribute::setIndex(int inIndex, int* ret_index = nullptr)
{
if (inIndex < 0)
{
index = 0;
}
else if (inIndex >= MAX_NUM_ATTRIBUTES)
{
index = MAX_NUM_ATTRIBUTES - 1;
}
else
{
index = inIndex;
}
if (ret_index != nullptr) *ret_index = index;
return index;
}
int Attribute::getValueWithinRange(int value)
{
int retvalue;
setIndex(value); // use it like this when returning value is not needed
setIndex(value, &retvalue);
return retvalue;
}