setter和getter / classes

时间:2016-10-13 16:07:41

标签: c++ class setter getter

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

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?

2 个答案:

答案 0 :(得分:2)

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; }

应该是:

SELECT su.orgid, arc.userid, 
    SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 WEEK,arc.processed_records,0)) Record_Week, 
    SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 MONTH,arc.processed_records,0)) Record_Month, 
    SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 3 MONTH,arc.processed_records,0)) Record_3Month, 
    SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 6 MONTH,arc.processed_records,0)) Record_6Month, 
    SUM(IF(arc.create_dt>CURRENT_DATE - INTERVAL 1 YEAR,arc.processed_records,0)) Record_Year 
FROM archive.log_archive arc 
INNER JOIN prod_db.user su ON su.name = arc.userid

答案 1 :(得分:2)

问题是您要从vector<Task>函数返回GetTasks的副本。然后,您可以修改此副本,然后将其丢弃。 Project的内部成员未更改。

如果您按照以下方式返回:

vector<Task>& GetTasks();

然后你基本上会返回指向内部向量的东西,所以当你修改它时,你实际上修改了你的类的成员数据。