C++ 将对对象的引用传递给突变C++;
我有一个对象,其方法需要改变外部实例化对象。我一直在尝试引用参数中的对象,这显然不起作用。这就是我所拥有的:C++ 将对对象的引用传递给突变C++;,c++,pointers,object,parameters,C++,Pointers,Object,Parameters,我有一个对象,其方法需要改变外部实例化对象。我一直在尝试引用参数中的对象,这显然不起作用。这就是我所拥有的: #include <iostream> #include <cstdlib> #include "Character.h" using namespace std; class TesterClass { public: void printStuff(); TesterClass(Character& userChar); priva
#include <iostream>
#include <cstdlib>
#include "Character.h"
using namespace std;
class TesterClass {
public:
void printStuff();
TesterClass(Character& userChar);
private:
Character& character;
};
TesterClass::TesterClass(Character& userChar)
{
character = userChar;
}
int main() {
Character userCharacter;
TesterClass tester(userCharacter);
return 0;
}
#包括
#包括
#包括“Character.h”
使用名称空间std;
类测试员类{
公众:
作废印刷品();
TesterClass(字符和用户字符);
私人:
性格&性格;
};
TesterClass::TesterClass(字符和用户字符)
{
character=userChar;
}
int main(){
字符用户字符;
测试器类测试器(userCharacter);
返回0;
}
我的问题是如何使用实例化的tester类通过参数传递来编辑Character对象。我在C++中是非常新的,我已经阅读了每个可感知的引用和点传递的定义,它似乎并不想点击。< /p> < p>你的构造函数应该是:
TesterClass::TesterClass(Character&userChar):Character(userChar){}
另见
为了处理注释,下面是修改值的示例代码:
#include <iostream>
#include <cstdlib>
typedef char Character;
using namespace std;
class TesterClass {
public:
void printStuff();
TesterClass(Character& userChar);
private:
Character& character;
};
TesterClass::TesterClass(Character& userChar):character(userChar)
{
}
void TesterClass::printStuff() {
cout << character << endl;
cout << ++character << endl;
}
int main() {
Character userCharacter = 'a';
TesterClass tester(userCharacter);
tester.printStuff();
cout << userCharacter << endl;
++userCharacter;
cout << userCharacter << endl;
tester.printStuff();
return 0;
}
您的构造函数应该是:
TesterClass::TesterClass(Character&userChar):Character(userChar){}
另见
为了处理注释,下面是修改值的示例代码:
#include <iostream>
#include <cstdlib>
typedef char Character;
using namespace std;
class TesterClass {
public:
void printStuff();
TesterClass(Character& userChar);
private:
Character& character;
};
TesterClass::TesterClass(Character& userChar):character(userChar)
{
}
void TesterClass::printStuff() {
cout << character << endl;
cout << ++character << endl;
}
int main() {
Character userCharacter = 'a';
TesterClass tester(userCharacter);
tester.printStuff();
cout << userCharacter << endl;
++userCharacter;
cout << userCharacter << endl;
tester.printStuff();
return 0;
}
我同意前面的回答/评论-您真的应该在构造函数中使用初始化列表。问题是您的数据成员是通过初始化列表初始化的(这发生在调用构造函数主体之前)。在您的情况下,您有一个
字符&
作为成员。因为这是一个引用,所以必须给它赋值。我不确定您使用的是哪种编译器,但我知道这些代码甚至不应该编译
您可能正在寻找的是在主方法中传递引用,如:
int main()
{
Character userCharacter;
// Notice the use of the &-operator
TesterClass tester(&userCharacter);
return 0;
}
此时,您不再讨论字符
-实例,而是讨论实例的内存地址。因此,由于您要传递mem地址,它实际上是类中需要的指针,而不是引用。(例如,userCharacter.SomeMethod()
是(&userCharacter)->SomeMethod()
的同义词,其中&
引用和->
取消引用)
相反,您可以将测试程序类编写为:
class TesterClass
{
public:
void printStuff();
TesterClass(Character* userChar);
private:
Character* character;
};
TesterClass::TesterClass(Character* userChar)
: character(userChar) // <- Notice the init-list
{}
类测试器类
{
公众:
作废印刷品();
TesterClass(字符*用户字符);
私人:
字符*字符;
};
TesterClass::TesterClass(字符*userChar)
:character(userChar)//我同意前面的答案/注释-您确实应该在构造函数中使用初始化列表。问题是您的数据成员是通过初始化列表初始化的(这发生在调用构造函数主体之前)。在您的情况下,您有一个字符&
作为成员。因为这是一个引用,所以必须给它赋值。我不确定您使用的是哪种编译器,但我知道这些代码甚至不应该编译
您可能正在寻找的是在主方法中传递引用,如:
int main()
{
Character userCharacter;
// Notice the use of the &-operator
TesterClass tester(&userCharacter);
return 0;
}
此时,您不再讨论字符
-实例,而是讨论实例的内存地址。因此,由于您要传递mem地址,它实际上是类中需要的指针,而不是引用。(例如,userCharacter.SomeMethod()
是(&userCharacter)->SomeMethod()
的同义词,其中&
引用和->
取消引用)
相反,您可以将测试程序类编写为:
class TesterClass
{
public:
void printStuff();
TesterClass(Character* userChar);
private:
Character* character;
};
TesterClass::TesterClass(Character* userChar)
: character(userChar) // <- Notice the init-list
{}
类测试器类
{
公众:
作废印刷品();
TesterClass(字符*用户字符);
私人:
字符*字符;
};
TesterClass::TesterClass(字符*userChar)
:character(userChar)//根据我的测试,原始对象userCharacter不会通过初始化列表进行修改。任何其他实现?原始对象userCharacter不会根据我的测试通过初始化列表进行修改。还有其他的实现吗?你的解决方案是可行的,但是你不能使用引用来改变角色实例的评论是错误的。啊,是的。看到了你的解决方案,当然你是对的-你可以改变实例。我编辑了我的答案。谢谢你指出。你的解决方案是有效的,但是你不能使用引用来改变角色实例的评论是错误的。啊,是的。看到了你的解决方案,当然你是对的-你可以改变实例。我编辑了我的答案。谢谢你指出这一点。