如何将数组传递给函数?使用 C++ 作为 OO 类

How to pass arrays to functions? Using C++ as OO class

本文关键字:使用 C++ 作为 OO 函数 数组      更新时间:2023-10-16

我试图更好地了解在C++中使用数组。我正在使用面向对象的方法来执行此操作,所以我确实有一个类。我在一个函数中接受用户输入到字符串数组中,并尝试在另一个函数中打印输出。我在打印或传递输出时遇到一些困难。如何将字符串数组作为参数传递给另一个函数?我知道C++使用指针和地址。调试程序时,我看到只有数组地址传递给打印函数。如何获取要传递给输出函数的实际数组值?我的三个文件在下面...

我的主要...

#include <iostream>
#include "ElectionResults.h"
#include <string>
using namespace std;
void main()
{
    string candidates[5];
    ElectionResults election;
    election.enterElectionData();
    election.displayElecionData(candidates);
    cin.ignore();
    cin.ignore();
}

我的 CPP 文件...

#include "ElectionResults.h"
#include <iostream>
using namespace std;
ElectionResults::ElectionResults(void)
{
}
void ElectionResults::enterElectionData(void)
{
    for (int i = 0; i < 5; i++)
    {
        cout << "Candidiate number " << i + 1 << ": ";
        cin >> candidates[i];
    }
    cout << endl;
}
void ElectionResults::displayElecionData(string candidates[5])
{
    for (int i = 0; i < 5; i++)
    {
        cout << "Candidate name " << i + 1 << ": " << candidates[i] << endl; 
    }
    cout << endl;
}
ElectionResults::~ElectionResults(void)
{
}

我的头文件...

#ifndef ELECTIONRESULTS_H 
#define ELECTIONRESULTS_H
#include <string>
using namespace std;
class ElectionResults
{
    private:
        string candidates[5];
    public:
        void enterElectionData();
        void displayElecionData(string candidates[5]);
        ElectionResults(void);
        ~ElectionResults(void);
};
#endif

谢谢

您可以使用绑定数组参数语法

void displayElecionData(string (&candidates)[5]);

在这种情况下(正如 Ben Voigt 指出的那样),数组不会衰减为指针(即使 [] 只是语法糖),您可以在编译时确保只有 5 个元素的数组可以传递给您的函数。

没有 my_array.size() 或类似的函数,所以你需要将大小存储在某个地方,并将其作为参数发送到每个采用数组的函数中,除非你有非常明确的指定数组。然而,在我看来,有一种更好的方法可以做到这一点。使用 std::vector 或 std::array。

#include <vector>
#include <string>
void doStuff(std::vector<std::string>& lines) {
    for(int i = 0; i < lines.size(); ++i) {
        //do stuff to lines[i]
    }
}
int main() {
    std::vector<std::string> my_lines;
    doStuff(my_lines);
    return 0;
}

我建议你学习如何使用原始数组,然后改用std::vector或std::array。从长远来看,这很可能会减少错误和问题。

如果其他人对数组和指针之间的区别感到好奇,我发现这个答案很有启发性:https://stackoverflow.com/a/1049535/197657

似乎您的实际问题与将数组传递给函数无关,而是您缺少一些基本的东西。

enterElectionData函数中,您正在将输入读取到类成员candidates中,但在函数displayElecionData中,您正在打印参数candidates,该参数是从main函数传递的,其中从未被赋予任何值。

displayElecionData函数中candidates参数隐藏成员candidates,更具体地说,您可以使用this关键字访问类成员(例如 this->candidates)。或者只是删除参数,因为它不是必需的。

如果这是您面临的问题,那么您需要熟悉类的基本概念(实例成员及其作用域等)。