首页 > 解决方案 > 将对象数组传递给函数

问题描述

我有一个类将 object.name 定义为“Ben”,object.favNum 定义为 25。

我还有一个数组(名称)来存储此类的 5 个对象。

在输出数组中对象的属性之前,我使用指针表示法将 names[0].name 的值更改为“Jim”,将 names[0].favNum 的值更改为 40。

这是我的代码:

#include<iostream>

class Person {
public:
    std::string name = "Ben";
    int favNum = 25;
};


int main()
{
    Person names[5];

    Person *ptr = &names[0];


    // Changing Values
    (ptr + 0)->name = "Jim";
    (ptr + 0)->favNum = 40;


    for (int i = 0; i < 5; i++) 
    {
        std::cout << (std::string) (ptr + i)->name   << std::endl;
        std::cout << (int) (ptr + i)->favNum << std::endl << std::endl;
    }

    system("pause>0");
}

输出:

Jim
40

Ben
25

Ben
25

Ben
25

Ben
25

在我有“更改值”注释的地方,我想用一个函数替换这两行。该函数将能够像我对 2 行所做的那样更改值。这是我遇到问题的地方。

我正在努力弄清楚将函数声明为什么类型、如何传递指针、如何接收指针以及如何更改函数中数组中对象的值。

标签: c++arraysfunctionclassobject

解决方案


这就是您的代码在“真实” c++ 中的外观(值的设置将在构造函数或使用setNameAndFavNum()函数中完成):

#include <array>
#include <iostream>

struct Person {
public:
    Person(const std::string& name_ = "Ben", int favNum_ = 25) : name(name_), favNum(favNum_) {};
    void setNameAndFavNum(const std::string& name_, int favNum_) {
        name = name_;
        favNum = favNum_;
    };

    std::string name;
    int favNum;
};    

int main() {
    std::array<Person, 5> names;


    // Changing Values
    names[0].setNameAndFavNum("Jim", 40);

    // Alternatively you can use the constructor and implicit copy constructor
    // names[0] = {"Jim", 40};

    for (int i = 0; i < names.size(); i++)  {
        std::cout << names[i].name << std::endl;
        std::cout << names[i].favNum << std::endl << std::endl;
    }
}

在编写 C++ 代码时,您不应该乱用指针和原始值。


推荐阅读