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

时间:2014-02-09 22:37:53

标签: c++ arrays class oop parameters

我试图更好地使用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

谢谢

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

没有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

答案 2 :(得分:0)

看起来你的实际问题与将数组传递给函数无关,而是你遗漏了一些基本的东西。

enterElectionData函数中,您正在读取类成员candidates的输入,但在函数displayElecionData中,您正在打印从主函数传递的参数candidates ,它从未被赋予任何价值。

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

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