|
|||||||
Указатель this, chain вызов методов класса, конструктор копирования, конструктор присваивания
Время создания: 13.06.2020 18:33
Раздел: C++ - Примеры кода - Работа на уроке
Запись: Shut913/Tetra-notes-Programming/master/base/1592062418bnh2dkms04/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
main.cpp #include <string> #include <iostream> using namespace std; // Скрытый указатель *this //------------------------ //class A //{ //private: // int _val; // //public: // A(int val): _val{val} {} // void setVal(int val) // { // this->_val = val; // } // int getVal() // { // return _val; // } //}; // ////void setVal(A* const this, int val) ////{ //// ////} // // //void main() //{ // A a(14); // // a.setVal(18); // //setVal(&a, 18); // // cout << a.getVal() << endl; //} //class Chain //{ //private: // int _val; //public: // Chain(): _val{} {} // // Chain& add(int val) { this->_val += val; return *this; } // Chain& sub(int val) { this->_val -= val; return *this; } // Chain& mult(int val) { this->_val *= val; return *this; } // // void print() // { // cout << _val << endl; // } //}; // //void main() //{ // Chain chain; // /*chain.add(2); // chain.sub(6); // chain.mult(3);*/ // // chain // .add(2) // .sub(6) // .mult(3); // // chain.print(); // //} copyConst.cpp #include <string> #include <iostream> using namespace std; // Побитовое копирование // Конструктор копирования // copy initializer //Общий вид : //class_name(const class_name& obj) //{ // ... //тело конструктора //} // User a // User b = a; User b(a); User b{a} class Box { private: int* _p; public: Box(): _p{nullptr} {} Box(int p) { _p = new int; *_p = p; } // copy contructor Box(const Box& obj) { _p = new int; *_p = *(obj._p); cout << "copy contructor" << endl; } // переопределение оператора присваивания Box& operator=(const Box& obj) { // 1. Выделить память, если она не была предварительно выделена if (_p == nullptr) _p = new int; // 2. Скопировать данные *_p = *(obj._p); // 3. Возвратить текущий объект return *this; } int getP() { return _p != nullptr ? *_p : 0; } void setP(int p) { if (_p == nullptr) _p = new int; *_p = p; } ~Box() { if (_p != nullptr) delete _p; cout << "destructor" << endl; } }; void main() { Box a(15); Box b(a); cout << "After b(a)" << endl; cout << "*(a._p) = " << a.getP() << endl; cout << "*(b._p) = " << b.getP() << endl; b.setP(5); cout << "After b.setP" << endl; cout << "*(a._p) = " << a.getP() << endl; cout << "*(b._p) = " << b.getP() << endl; } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|