c++ setter/getter 无法按预期工作

问题描述 投票:0回答:1

出于某种原因,我的教授坚持我必须在任何地方都使用 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;
}

我期望输出“一个字符串”,而不是空的......我做错了什么?

c++ list getter setter
1个回答
0
投票

Node::getSomeClass()
方法按值返回一些东西。这意味着返回的对象是原始变量的副本,当当前块范围完成时它将被销毁。

如果你想编辑原始值,你需要通过引用返回它:

SomeClass& getSomeClass() {...}

这样你会得到原始对象的引用,你可以编辑它。

© www.soinside.com 2019 - 2024. All rights reserved.