调用函数并返回值

Calling functions and returning values

本文关键字:返回值 函数 调用      更新时间:2023-10-16

我是一个c++初学者。我有一个函数,它返回一些我需要的参数,在我程序的其余部分使用。我试图在另一个类中访问该函数。我不知道该怎么做。有人能帮帮我吗?

下面是我的代码:
 void SampleProgram :: myFunction()
   {
         string sInput;
         GetInfo  getInfo(sInput);  //creating instance of the class containing the function
            string sSw="";
       string sName="ram";
       string sList="list";
           getInfo.getRequiredInfo(sSw,sName,sList); //calling the function
    }

如何访问getRequiredInfo() ..的输出参数?如果输出参数如下,则保存它:字符串名称,int状态

您必须向我们展示getRequiredInfo()的声明,但据推测它类似于

X result = getInfo.getRequiredInfo(sSw,sName,sList);

我们不知道X是什么

如果getRequiredInfo得到字符串的地址,请尝试:

getInfo.getRequiredInfo(&sSw, &sName, &sList);

现在函数可以改变参数的值

可以在函数中返回单个值

所以你可以创建包含string和int的结构体,并返回结果

    struct
    {
           string name;
            int    k;
    }result;
    result r = getInfo.getRequiredInfo(sSw,sName,sList); //calling the function

可以这样保存输出参数:

   string _name;
   int       nk;
   _name = r.name;
   nk    = r.k;

最简单的是从函数返回一个pair<string,int>。函数的特征是pair<string,int> getRequiredInfo(const string& s1, const string& s2, constr string& s3);。然后,您可以使用pairfirstsecond成员访问stringint部分。

听起来好像getRequiredInfo具有读取和写入您传入的一些参数的行为。

在c++中,与c#不同,没有办法指定函数应该或必须改变给定参数的值。实际上,如果您像这样定义函数:

void GetInfo::getRequiredInfo(string a, string b, string c);

则所有三个形参将通过值传递,这意味着在函数内部对它们所做的任何更改都将更改对这些对象的副本,而不是对象本身。

正如其他贡献者所建议的,如果您真的想要更改传入的参数,您可以通过传递引用来实现:

void GetInfo::getRequiredInfo(string a, string& b, string& c);

或者(更典型地)通过传递指针:

void GetInfo::getRequiredInfo(string a, string* b, string* c);

然而,如果你想让你的函数简单地读取参数并返回一个值(这是你称之为"输出参数"的更被接受的术语),那么你必须将你的"名称+状态"元组表示为单个值。

你可以使用内置的pair模板,就像别人刚才建议的:

pair<string,int> getRequiredInfo(string a, string b, string c);

或者你可以定义你自己的结构体来做这件事,就像其他人建议的那样:

struct NameAndStatus
{
    string name;
    int status;
};
NameAndStatus getRequiredInfo(string a, string b, string c);