出于某种原因,我的教授坚持我必须在任何地方都使用 setter/getter。 好吧...在这个链接列表中我不明白为什么这个不起作用
#include <iostream>
#include <string>
using namespace std;
class SomeClass{
string some_string;
public:
void setSomeString(string s);
string getSomeString();
};
void SomeClass::setSomeString(string s){
some_string = s;
}
string SomeClass::getSomeString(){
return some_string;
}
class Node{
SomeClass some_class;
Node *next;
public:
void setSomeClass(SomeClass sc);
SomeClass getSomeClass();
//...
};
void Node::setSomeClass(SomeClass sc){
some_class = sc;
}
SomeClass Node::getSomeClass(){
return some_class;
}
class List{
public:
Node *head, *ptr;
//...
};
int main(){
List l;
l.head = new Node();
l.head->getSomeClass().setSomeString("a string");
cout << l.head->getSomeClass().getSomeString();
return 0;
}
我期望输出“一个字符串”,而不是空的......我做错了什么?
Node::getSomeClass()
方法按值返回一些东西。这意味着返回的对象是原始变量的副本,当当前块范围完成时它将被销毁。
如果你想编辑原始值,你需要通过引用返回它:
SomeClass& getSomeClass() {...}
这样你会得到原始对象的引用,你可以编辑它。