Advertisement
wintest

ООП: RegTask - 2 динамични array +add

Apr 9th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.11 KB | None | 0 0
  1. #include<iostream>
  2. #include "RegTask.h"
  3.  
  4. using namespace std;
  5.  
  6. int main() {
  7.     int t[5] = { 100,200,300,400,500 };
  8.     double s[5] = { 264.5,1515.88,48.8,515.5,484.99 };
  9.  
  10.     RegTask a(5, t, s);
  11.     RegTask b = a;
  12.  
  13.     {
  14.         RegTask c;
  15.         c = a+b;
  16.         c.print();
  17.     }
  18.     a.print();
  19.     cout << endl;
  20.     b.print();
  21.     cout << endl;
  22. }
  23.  
  24. //RegTask.h
  25. #pragma once
  26.  
  27. class RegTask {
  28. public:
  29.     //constructors
  30.     RegTask();
  31.     RegTask(size_t);
  32.     RegTask(size_t, int *, double *);
  33.     RegTask(const RegTask &);
  34.    
  35.     ~RegTask();
  36.  
  37.     //предифиниране на =
  38.     RegTask &operator =(const RegTask &);
  39.     RegTask operator +(const RegTask &) const;
  40.  
  41.     //Set + Get
  42.     int SetCounter(size_t);
  43.     int SetTask(size_t,int *);
  44.     int setLasary(size_t,double *);
  45.  
  46.  
  47.     size_t GetCounter() const;
  48.     int * getTask() const;
  49.     double * getSalary() const;
  50.  
  51.     int print() const;
  52.  
  53.     int addTask(int, double);
  54.  
  55. private:
  56.     size_t count;
  57.     int * task;
  58.     double * salary;
  59.  
  60. };
  61.  
  62. //RegTask.cpp
  63. #include "Regtask.h"
  64. #include<iostream>
  65.  
  66. RegTask::RegTask(): count(0), task(NULL),salary(NULL) {} //NULL for pointers
  67. RegTask::RegTask(size_t count): count(count), task(new int [count]),salary(new double[count]){} //заделяме памет
  68.  
  69. RegTask::RegTask(size_t count, int * task, double * salary): count(count), task(new int[count]), salary(new double[count]){
  70.  
  71.     for (size_t i = 0; i < count; i++)
  72.     {
  73.         this->task[i] = task[i];
  74.         this->salary[i] = salary[i];
  75.     }
  76. }
  77. RegTask::RegTask(const RegTask &right){
  78.     count = right.count;
  79.     task = new int[count];
  80.     salary = new double[count];
  81.  
  82.     for (size_t i = 0; i < count; i++)
  83.     {
  84.         task[i] =right.task[i];
  85.         salary[i] = right.salary[i];
  86.     }
  87. }
  88.  
  89. RegTask::~RegTask(){
  90.  
  91.     delete [] task;   // чистим динамичните данни   //всички уакзатели ги пишем ние
  92.     delete [] salary;
  93. }
  94.  
  95. int RegTask::SetCounter(size_t task) {
  96. this->count = count;
  97.     return 0;
  98. }
  99. int RegTask::SetTask(size_t counter,int * task){
  100.     if (this->count != 0 && this->task != NULL) delete[]this->task;
  101.  
  102.     this->count = count;
  103.     this->task = new int[count];
  104.  
  105.     for (size_t i = 0; i < count; i++)
  106.     {
  107.         this->task[i] = task[i];
  108.     }
  109.     return 0;
  110. }
  111. int RegTask::setLasary(size_t counter,double * salary){
  112.  
  113.     if (this->count != 0 && this->salary != NULL) delete[]this->salary;
  114.  
  115.     this->count = count;
  116.     this->salary= new double[count];
  117.  
  118.     for (size_t i = 0; i < count; i++)
  119.     {
  120.         this->salary[i] = salary[i];
  121.     }
  122.     return 0;
  123. }
  124.  
  125.  
  126. size_t RegTask::GetCounter() const{
  127.     return count;
  128. }
  129. int * RegTask::getTask() const{
  130.     return task;
  131. }
  132. double * RegTask::getSalary() const{
  133.     return salary;
  134. }
  135.  
  136. int RegTask::print() const{
  137.     std::cout << " Number of registered task is " << count << std::endl;
  138.     for (size_t i = 0; i < count; i++)
  139.     {
  140.         std::cout << " For task with number " << task[i] << " the user recieved " << salary[i] << std::endl;
  141.    
  142.     }
  143.     return 0;
  144. }
  145.  
  146. RegTask & RegTask::operator =(const RegTask & right) {
  147.     if (this != &right) {//dali ne sa edin obekt
  148.    
  149.         if (count != 0) { //zadelena e pamet za masivi
  150.             delete[] task;
  151.             delete[] salary;
  152.         }
  153.         count = right.count;
  154.         task = new int[count];
  155.         salary = new double[count];
  156.  
  157.         for (size_t i = 0; i < count; i++)
  158.         {
  159.             task[i] = right.task[i];
  160.             salary[i] = right.salary[i];
  161.         }
  162.     }
  163.     return *this;  //return променения текущ обект
  164. }
  165.  
  166. int RegTask::addTask(int newTask, double newSalary){
  167.     count++;
  168.  
  169.     int * tmpTask = new int[count];
  170.     double* tmpSalary = new double[count];
  171.  
  172.  
  173.     for (size_t i = 0; i < count-1; i++)
  174.     {
  175.         tmpTask[i] = task[i];
  176.         tmpSalary[i] = salary[i];
  177.     }
  178.  
  179.     if (count - 1 != 0) {
  180.         delete[] task;
  181.         delete[] salary;
  182.     }
  183.  
  184.     tmpTask[count - 1] = newTask;
  185.     tmpSalary[count - 1] = newSalary;
  186.  
  187.     //prenasochvane na ukazatelite
  188.     task = tmpTask;
  189.     salary = tmpSalary;
  190.  
  191.     return 0;
  192.  
  193. }
  194. RegTask RegTask:: operator +(const RegTask & right) const {
  195.  
  196.     size_t tmpCount;
  197.     (count < right.count) ? tmpCount = count : tmpCount = right.count;
  198.  
  199.     RegTask sum(tmpCount);
  200.     for (size_t i = 0; i < tmpCount; i++)
  201.     {
  202.         sum.task[i] = task[i] + right.task[i];
  203.         sum.salary[i] = salary[i] + right.salary[i];
  204.     }
  205.     return sum;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement