Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- class MarksStorage
- {
- const size_t size;
- int* storage;
- static size_t count;
- public:
- static const int maxMark{ 12 };
- static const int minMark{ 1 };
- MarksStorage(size_t sizeP) : size{ sizeP }, storage{ new int[sizeP] {} } {std::cout << "Acquire memory for marks!\n"; ++count; }
- MarksStorage() : MarksStorage(1) {}
- MarksStorage(const MarksStorage& ms) : size{ms.size}, storage{new int[ms.size]}
- {
- for (int i{ 0 }; i < size; ++i)
- {
- storage[i] = ms.storage[i];
- }
- std::cout << "MarksStorage COPY constructed for -> " << this << '\n';
- }
- bool setMark(size_t id, int mark)
- {
- if (id < 0 or id > size - 1 or mark < MarksStorage::minMark or mark > MarksStorage::maxMark) { return false; }
- storage[id] = mark;
- return true;
- }
- int getMark(size_t id)
- {
- if (id < 0 or id > size - 1) { return 0; }
- return storage[id];
- }
- int getSize() { return size; }
- static int getCount() { return count; }
- void print(/* MarksStorage* const this */)
- {
- // ++size; // ERROR!!
- std::cout << "Marks: ";
- for (int i{ 0 }; i < this->size; ++i)
- {
- std::cout << storage[i] << ' ';
- }
- std::cout << '\n';
- }
- ~MarksStorage() { std::cout << "Try to delete memory by ptr - > " << storage << '\n'; delete[] storage; std::cout << "Release memory from marks!\n"; --count; }
- };
- size_t MarksStorage::count{ 0 };
- //print(&ms1);
- void print(MarksStorage& ms)
- {
- std::cout << "Marks: ";
- for (int i{ 0 }; i < ms.getSize(); ++i)
- {
- std::cout << ms.getMark(i) << ' ';
- }
- std::cout << '\n';
- }
- int main()
- {
- //char* str{ new char[10]{"hello"} };
- //char* str1{ str };
- //std::cout << str1 << '\n';
- //return 0;
- MarksStorage ms1{ 4 };
- ms1.setMark(0, 11);
- ms1.setMark(1, 7);
- ms1.setMark(2, 9);
- ms1.setMark(3, 10);
- std::cout << "MarksStorage 1\n";
- //ms1.print();
- print(ms1);
- MarksStorage ms2{ ms1 };
- std::cout << "MarksStorage 2\n";
- //ms2.print();
- print(ms2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment