setter 和 getter /类

setter and getter /classes

我有一个 class 项目,每个项目可以有不同的任务。

Project.h:

#pragma once
#include "Task.h"
#include <vector>

using namespace std;

class Project
{
  private:
    vector<Task> Tasks;
  public:

    Project::Project(int inleesgetal);//constructor

    vector<Task> GetTasks();
};

Project.cpp:

#include "Project.h"
#include <string>
#include <vector>
Project::Project(int inleesgetal)
{

    //constructor
    Tasks.resize(Numbertasks);
}

vector<Task> Project::GetTasks()
{
    return Tasks;
}

Task.h:

#pragma once
#include <vector>

using namespace std;

class Task
{

  private:
    //Info:

    int StartTime_Solo;

  public:

    Task(); //constructor

    void SetStartTime_Solo(int st_s);

    int GetStartTime_Solo();

};

Task.cpp:

#include "Task.h"
#include <string> 
#include <vector>
#include <iostream>

using namespace std;


Task::Task()
{
    //constructor
    StartTime_Solo = 0;
}

int Task::GetStartTime_Solo()
{
    return StartTime_Solo;
}

void Task::SetStartTime_Solo(int st_s)
{
    StartTime_Solo = st_s;
}

主要内容:

#include <iostream>
#include <vector>

#include "Task.h" 
#include "Project.h"

using namespace std;


int main()
{

    Project Project1(6);

    Project1.GetTasks()[2].SetStartTime_Solo(55);
    cout << "test:" << Project1.GetTasks()[2].GetStartTime_Solo();
    return 0;
}

现在,当我尝试将 Project1 的第 3 个任务的开始时间设置为 55,然后打印开始时间时,结果仍然是 0。 为什么是这样?我怎样才能更改我的代码,以便它实际上将开始时间设置为 55?

vector<Task> GetTasks();

应该是

const vector<Task>& GetTasks() const;
vector<Task>& GetTasks();

定义也是如此:

vector<Task> Project::GetTasks()
{
    return Tasks;
}

应该是:

const vector<Task>& Project::GetTasks() const { return Tasks; }
vector<Task>& Project::GetTasks() { return Tasks; }

问题是您正在 return 从 GetTasks 函数复制 vector<Task>。然后您修改此副本并立即将其丢弃。 Project 的内部成员没有改变。

如果您 return 像这样引用:

vector<Task>& GetTasks();

然后你基本上是 return 指向内部向量的东西,所以当你修改它时,你实际上修改了你的 class.

的成员数据