MyTetra Share
Делитесь знаниями!
Указатель 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;


}


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования