I'm having some trouble figuring this out.
I have a class heirarchy
Project
--> SimpleProject
--> MinorProject
--> MajorProject
Now a simple project and a minor project can be merged to create a simple project, a simple project and a major project can be merged to create a major project. Basically any project can be merged with any other project which creates a new project.
A simple project contains one and only one task. A Minor project contains a list of tasks, so merging a simple and minor project would create a new minor project with the list of the previous minor project and with the task from the simple project added to it. Also a major project is just like a minor project but with dependency's between tasks. So merging a major and a minor gives a major. Does this all make sense?
So basically i want to write a function which does this. I have been told it can be done using Dynamic Binding but im not seeing how...
Here are my class definition files if that helps you picture this more
Project.h:
SimpleProject.h:Code:#ifndef PROJECT_H #define PROJECT_H // forward declaration class Task; class Project { public: Project(); Project(const Project &); virtual ~Project(); // some pure virtual functions virtual void AddTask(Task *) = 0; virtual void DoTask() = 0; virtual bool HasTasks() = 0; private: // still to add... }; #endif
MinorProject.hCode:#ifndef SIMPLEPROJECT_H #define SIMPLEPROJECT_H #include "Project.h" #include "Task.h" class SimpleProject : public Project { public: SimpleProject(); SimpleProject(const SimpleProject &); ~SimpleProject(); void AddTask(Task *); void DoTask(); bool HasTasks(); SimpleProject & operator=(const SimpleProject & other); friend std::ostream & operator<<(std::ostream & os, const SimpleProject & sp); friend bool operator==(const SimpleProject & left, const SimpleProject & right); friend bool operator!=(const SimpleProject & left, const SimpleProject & right); private: Task *task; // the total number of tasks int numTasks; }; #endif
MajorProject.h (this one is not yet competed...):Code:#ifndef MINORPROJECT_H #define MINORPROJECT_H #include <list> #include "Project.h" #include "Task.h" class MinorProject : public Project { public: MinorProject(); MinorProject(const MinorProject &); ~MinorProject(); void AddTask(Task *); void DoTask(); bool HasTasks(); MinorProject & operator=(const MinorProject &); friend std::ostream & operator<<(std::ostream &, const MinorProject &); friend bool operator==(const MinorProject &, const MinorProject &); friend bool operator!=(const MinorProject &, const MinorProject &); private: list<Task> *task_list; }; #endif
If anyone can point me int he rigth direction i would appreciate that.Code:#ifndef MAJORPROJECT_H #define MAJORPROJECT_H #include "Project.h" #include "Task.h" #include <list> #include <vector> class MajorProject : public Project { public: MajorProject(); MajorProject(const MajorProject &); //MajorProject(list<Task> *, vector<int *> *); ~MajorProject(); void AddTask(Task *); void AddDependency(const vector<int> &); void DoTask(); bool HasTasks(); MajorProject & operator=(const MajorProject & other); friend std::ostream & operator<<(std::ostream & os, const MajorProject & mp); friend bool operator==(const MajorProject & left, const MajorProject & right); friend bool operator!=(const MajorProject & left, const MajorProject & right); private: list<Task> *task_list; vector<vector<int>> *depend_vec; }; #endif



LinkBack URL
About LinkBacks


