gpt4 book ai didi

C++ 通过引用传递类中的函数

转载 作者:太空狗 更新时间:2023-10-29 22:55:30 25 4
gpt4 key购买 nike

我正在尝试传递对类中函数的引用,但我不知道如何去做。所以说我有一个这样定义的类 test

#include <iostream>

class test {
public:
test () {};
~test () {};

void setA (int);
int getA (void);

private:
int a;

};

void test::setA (int A) { a = A; }

int test::getA (void) { return a; }

using namespace std;

int main ()
{
test T;
T.setA(5);

cout << "a = " << T.getA() << endl;

return 0;
}

这很好,但如果我想通过引用传递值

#include <iostream>

class test {
public:
test () {};
~test () {};

void setA (int);
int & getA (void);

private:
int a;

};

void test::setA (int & A) { a = A; }

int & test::getA (void) { return a; }

using namespace std;

int main ()
{
test T;
T.setA(5);

cout << "a = " << T.getA() << endl;

return 0;
}

我不知道如何配置 setA 以通过引用传递。

最佳答案

代码有两个问题。首先,setA 的定义与声明不匹配。您必须使声明将引用作为参数。

改变这个:

void setA (int);

对此:

void setA (int&);

第二个问题是您试图传递一个右值 (5) 作为引用。您必须传入左值。您可以通过先创建一个 int 然后通过引用传递它来做到这一点:

int i = 5;
T.setA(i);

完整示例:

#include <iostream>

class test {
public:
test () {};
~test () {};

void setA (int&);
int & getA (void);

private:
int a;

};

void test::setA (int & A) { a = A; }

int & test::getA (void) { return a; }

using namespace std;

int main ()
{
test T;

int i = 5;


T.setA(i);

cout << "a = " << T.getA() << endl;

return 0;
}

当您在 C++ 中通过引用将某些内容传递给函数时,该函数不会自动将参数保存在内存中。因此,您必须先声明它,以便它在整个函数中都保留在内存中。

您尝试作为引用传递的 5 会超出范围并在函数启动后立即被销毁。声明的 i 变量在主函数结束时被销毁。

关于C++ 通过引用传递类中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51737197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com