如何将包含指针成员的对象传递给函数?我希望能够修改该对象成员并使main中的原始对象具有反映在其上的修改值,简单代码我只想知道如何执行此操作。我是新人。我使这段代码像我的代码一样简单,我尝试了一个重载的赋值运算符和一个复制构造函数,但仍然没有好处。有人可以向我解释当我调用函数set()时发生的过程;以及为什么我收到错误
我想使用set()函数将对象名称成员更改为另一个
#include <iostream>
#include <string>
using namespace std;
class student
{
public:
void setName(string *nameVariable);
void printName(){ cout << *name; }
private:
string *name;
};
void student::setName(string *nameVariable)
{
name = nameVariable;
}
void set(student& student1);
int main()
{
string *nameptr, name;//creates pointer and varible of type string
nameptr = &name;//sets nameptr to the adress of name
*nameptr = "Nick";//inderict access, assigns what nameptr is pointing to the value"nick"
student student1;
student1.setName(nameptr);
student1.printName();//couts - Nick -
set(student1);
student1.printName();//should cout - Jorge - after modification however an error occurs
cout << endl;
system("pause");
}
void set(student& rightStudent)
{
string *nameptr, name;
nameptr = &name;
*nameptr = "Jorge";
student localStudent;
localStudent.setName(nameptr);
rightStudent = localStudent;
}
答案 0 :(得分:1)
主要问题是函数set
返回后,student1
指向悬空指针。在函数内部,rightStudent
指向name
的地址。一旦函数返回,该地址无效。因此,您看到了未定义的行为。
该计划非常脆弱。您正在存储指针,但只要对象(类型student
)处于活动状态,就没有足够的逻辑来确保指针保持有效。
为简单起见,您应该在student
中存储对象而不是指针。
class student
{
public:
void setName(string const& nameVariable);
void printName(){ cout << name; }
private:
string name;
};
更改后,程序的其余部分会变得更简单。
void student::setName(string const& nameVariable)
{
name = nameVariable;
}
void set(student& student1);
int main()
{
string name = "Nick";
student student1;
student1.setName(name);
student1.printName();
set(student1);
student1.printName();
cout << endl;
system("pause");
}
void set(student& rightStudent)
{
string name = "Jorge";
rightStudent.setName(name);
}