如何使用C ++中的函数永久更改类属性值?

M4GI3R

我用2个类的c ++编写了一个程序。基本上,“ HeroList”只是“ Hero”元素的向量。现在,我想更改每个英雄给定的值(在“更改”功能中)。但这是行不通的。仅当我直接使用“英雄”对象作为参数调用该函数时,它才有效(尝试1)。但是,当我使用“ heroList”元素作为参数(尝试2)时,它仅在函数处于活动状态且其重置时才更改值。我想这与引用的使用有关,但是我找不到我的错误。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Hero
{

private:
    string name;        //Hero-Name
    int value;          //Hero-Value

public:

    Hero(string name = "std", int value = 0) {

        this->name = name;
        this->value = value;
    }                           

    void setValue(int i) {
        if (i == 1) {                   //If 1 -> value - 1
            if (value != 0) {           //If value already 0 nothing happens
                value = value - 1;
            }
        }
        if (i == 2) {                   //If 2 -> value + 1
            if (value != 10) {          //If value already 10 nothing happens
                value = value + 1;
            }

        }
    }

    float getValue() {
        return value;
    }

    string getName() {
        return name;
    }

    void print() {
        cout << name << ": " << value << endl;
    }
};



class HeroList
{
private:
    string name;
    vector<Hero> Heroes;

public:
    HeroList(string name = "std", vector<Hero> Heroes = {}) {

        this->name = name;
        this->Heroes = Heroes;
    }

    string getName() {
        return name;
    }

    vector<Hero> getHeroes() {
        return Heroes;
    }

};



void change(Hero& x, Hero& y) {         //Function to change the Hero-Values permanently (not only during the function is running)
    
        x.setValue(2);
        y.setValue(1);

}



int main() {

    Hero Alice("Alice", 5);
    Hero Bob("Bob", 5);

    vector<Hero> duo = { Alice,Bob };

    HeroList Duo("Duo", duo);

    //try 1 
    change(Alice, Bob);
    cout << "try 1: " << endl;

    cout << Alice.getName()<<": " << Alice.getValue() << endl;
    cout << Bob.getName() << ": " << Bob.getValue() << endl << endl;
    
    //try 2
    change(Duo.getHeroes()[0], Duo.getHeroes()[1]);

    cout << "try 2: " << endl;
    cout << Duo.getHeroes()[0].getName() << ": " << Duo.getHeroes()[0].getValue() << endl;
    cout << Duo.getHeroes()[1].getName() << ": " << Duo.getHeroes()[1].getValue() << endl;

    return 0;
}

输出:

try 1:
Alice: 6
Bob: 4

try 2:
Alice: 5
Bob: 5

应该如何:

try 1:
Alice: 6
Bob: 4

try 2:
Alice: 6
Bob: 4
scohe001

您可以更新getHeroes()以返回向量引用Heroes以获得所需的行为:

vector<Hero>& getHeroes() {
    return Heroes;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flutter Dart:如何更改“类”列表中的类属性的值

来自分类Dev

如何遍历类属性而不是函数,并在python中返回属性值?

来自分类Dev

如何在类属性中存储函数?

来自分类Dev

如何在 C# 中获取类属性的属性值

来自分类Dev

如何更改特定MediaQuery的CSS类属性值?

来自分类Dev

如何单独更改类属性?

来自分类Dev

Python,使用类属性或函数中变量的速度更快?

来自分类Dev

c ++如何正确引用类属性的值

来自分类Dev

如何计算C#中的类属性?

来自分类Dev

使用 C++ 中的 switch 语句将不同的函数分配为类属性

来自分类Dev

如何检索类属性的属性值?

来自分类Dev

在C#中,如何仅在没有类属性的情况下生成值?

来自分类Dev

类属性中的C ++指针

来自分类Dev

如何更改RS4类属性的默认值-rpy2

来自分类Dev

如何从ng指令更改CSS类属性?

来自分类Dev

如何通过引用更改类属性?

来自分类Dev

如何更改案例类的基类属性

来自分类Dev

如何在传递给构造函数的箭头函数中访问类属性?

来自分类Dev

使用类属性限制函数参数值

来自分类Dev

访问在C ++中的函数内部的struct中定义的枚举类属性

来自分类Dev

如何使用jquery和javascript获取类属性值

来自分类Dev

如何使用反射获取嵌套类属性的值?

来自分类Dev

如何使用多重继承获取某些父类属性值

来自分类Dev

如何使用jquery和javascript获取类属性值

来自分类Dev

C#获取子类属性值

来自分类Dev

使用Excel VBA获取类属性值

来自分类Dev

Angular-如何通过$ scope中的函数更改$ scope属性值

来自分类Dev

C ++中数组的永久更改

来自分类Dev

如何继承基类属性并在JavaScript中调用基类构造函数?

Related 相关文章

热门标签

归档