使用C ++如何从void函数传递值?

时间:2015-11-09 02:34:23

标签: c++ c++11

我在一个类中有两个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函数,我不能简单地按照我上面的方式传递值。我应该通过参考传递还是有任何建议?非常感谢你。

1 个答案:

答案 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;
}