【问题标题】:Problems with getters and setters in C++ [closed]C ++中的getter和setter问题[关闭]
【发布时间】:2021-01-26 07:44:46
【问题描述】:

我的 C++ 中的 getter 和 setter 有问题。我实现了一个队列,我还实现了一个类 Process。我的队列保存进程。我的类 Process 有两个属性:“Identifier”和“Time”,还有 setter 和 getter。我将 80 设置为时间。那么问题是我想将时间修改为 50 并且它没有改变。我认为问题出在队列上,但我不知道在哪里。这是我的代码片段

Queue<Process> process;
Process x;
x.setIdentifier("Hi");
x.setTime(80);
process.enqueue(x);
process.getElementFront().setTime(50);
process.print();

这是我的队列代码:

class Queue{
private:
    int size;
    Node <L> *front;
public:
     .
     .
     .
    //front()
    
    L getElementFront() const{
        return this->front->getElement();
    }
    

这是我的节点代码:

class Node{
private:
    L elem;
    Node *next;
public:
    .
    .
    .
    L getElement() {
        return this->elem;
    }

这是我的流程类:

class Process{
private:
    string identifier;
    int time;
public:
    Process(){
        identifier = "";
        time = 0;
    }
    string getIdentifier(){
        return identifier;
    }
    int getTime(){
        return time;
    }
    void setTime(int time){
        this->time = time;
    }
    void setIdentifier(string identifier){
        this->identifier = identifier;
    }
    
    friend ostream &operator<<(ostream &o, const Process &p);
    
  };
  ostream &operator<<(ostream &o, const Process &p){
    o<<"Identifier: "<<p.identifier<<"\n";
    o<<"Time:"<<p.time<<"\n";
  return o;
  }

第一个代码的输出是:Time = 80。我应该是 Time = 50,但时间没有被修改。

【问题讨论】:

  • 您的函数返回值的副本,而不是引用,因此对该值的任何修改都不会影响原始值。
  • 如何才能退回原件?
  • 你知道什么是引用,以及如何使用它们吗?
  • 我做了这个函数: L getElementByReference() { L *pointer = &this->elem;返回*指针; }
  • 这能回答你的问题吗? C++ variables not changing as intended

标签: c++ class getter-setter access-modifiers modifier


【解决方案1】:

我相信您的函数“getElementFront”会返回您元素的副本,因此您的队列永远不会受到影响。您可以编写一个类似“setElementFront(int)”的函数来直接影响元素或类似的东西。

【讨论】:

  • 确认:它确实返回节点值的副本 (L)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多