C++ 通过引用传递 class 中的函数
C++ pass a function in a class by reference
我试图在 class 中传递对函数的引用,但我不知道如何去做。所以说我有一个 class 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&);
第二个问题是您试图传递一个 r 值 (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 变量在主函数结束时被销毁。
原因是因为为了通过引用传递,您必须有一个 lvalue,这是一种奇特的表达方式,可以在单次使用后持续存在。
如果您创建了一个 int 变量,您将能够通过引用传递它。在上面的代码中,您试图传递一个原始整数值 (5),但失败了,因为编译器期望引用一个 int,而不是原始整数值。
以下代码可以工作:
int main ()
{
test T;
int myVariable = 4; // Need an actual variable to pass by reference.
T.setA(myVariable);
cout << "a = " << T.getA() << endl;
return 0;
}
但是,如果您希望您的函数采用原始整数值,就像您在第二个示例中显示的那样,您必须有一个类似于第一个示例的函数定义,其中所有函数都采用整数。希望这对您有所帮助!
也许你可以试试这个:
#include <iostream>
class test {
public:
test() {};
~test() {};
void setA(int&&); // requires at least C++11
void setA(int&);
int & getA(void);
private:
int a;
};
void test::setA(int && A) { a = 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;
T.setA(8);
cout << "a = " << T.getA() << endl;
return 0;
}
在示例中,int&
传递左值,而 int&&
传递右值作为参考。
我试图在 class 中传递对函数的引用,但我不知道如何去做。所以说我有一个 class 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&);
第二个问题是您试图传递一个 r 值 (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 变量在主函数结束时被销毁。
原因是因为为了通过引用传递,您必须有一个 lvalue,这是一种奇特的表达方式,可以在单次使用后持续存在。
如果您创建了一个 int 变量,您将能够通过引用传递它。在上面的代码中,您试图传递一个原始整数值 (5),但失败了,因为编译器期望引用一个 int,而不是原始整数值。
以下代码可以工作:
int main ()
{
test T;
int myVariable = 4; // Need an actual variable to pass by reference.
T.setA(myVariable);
cout << "a = " << T.getA() << endl;
return 0;
}
但是,如果您希望您的函数采用原始整数值,就像您在第二个示例中显示的那样,您必须有一个类似于第一个示例的函数定义,其中所有函数都采用整数。希望这对您有所帮助!
也许你可以试试这个:
#include <iostream>
class test {
public:
test() {};
~test() {};
void setA(int&&); // requires at least C++11
void setA(int&);
int & getA(void);
private:
int a;
};
void test::setA(int && A) { a = 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;
T.setA(8);
cout << "a = " << T.getA() << endl;
return 0;
}
在示例中,int&
传递左值,而 int&&
传递右值作为参考。