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.
的成员数据
我有一个 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.
的成员数据