Чтение онлайн

ЖАНРЫ

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

itsRadius(radius)

{ }

4. Перегрузите операторы преинкремента и постинкремента для использования в ва-

шем классе SimpleCircle с переменной itsRadius.

const SimpleCircle& SimpleCircle::operator++

{

++(itsRadius);

return *this;

}

// постфиксный оператор Operator ++(int).

// Выборка, затем инкрементирование

const SimpleCircle SimpleCircle::operator++ (int)

// обьявляем локальный обьект класса SimpleCircle и инициализируем его значением

* this

SimpleCircle temp(*this);

++(itsRadius);

return temp;

}

5. Измените SimpleCircle

таким образом, чтобы сохранять itsRadius в динамической области памяти и фиксировать существующие методы.

class SimpleCircle

{

public:

SimpleCircle;

SimpleCircle(int);

~SimpleCircle;

void SetRadius(int);

int GetRadius;

const SimpleCircle& operator++;

const SimpleCircle operator++(int);

private:

int *itsRadius;

};

SimpleCircle::SimpleCircle

{itsRadius = new int(5);}

SimpleCircle::SimpleCircle(int radius)

{itsRadius = new int(radius);}

SimpleCircle::~SimpleCircle

{

delete itsRadius;

}

const SimpleCircle& SimpleCircle::operator++

{

++(*itsRadius);

return <<this;

}

// Постфиксный оператор Operator++(int).

// Выборка, затем инкрементирование

const SimpleCircle SimpleCircle::operator++ (int)

{

// объявляем локальный объект класса SimpleCircle и инициализируем его значением

*this

SimpleCircle temp(<<this);

++(*itsRadius);

return temp;

}

6. Создайте в классе SimpleCircle конструктор-копировщик.

SimpleCircle::SimpleCircle(const SimpleCircle & rhs)

{

int val = rhs.GetRadius;

itsRadius = new int(val);

}

7. Перегрузите в классе SimpleCircle оператор присваивания.

SimpleCircle& SimpleCircle::operator=(const SimpleCircle & rhs)

{

if (this == &rhs)

return *tnis;

delete itsRadius;

itsRadius = new int;

*itsRadius = rhs.GetRadius;

return *this;

}

8. Напишите программу, которая создает два объекта класса SimpleCircle. Для создания одного объекта используйте конструктор, заданный по умолчанию, а второму экземпляру при объявлении присвойте значение 9. С каждым из объектов используйте оператор инкремента и выведите полученные значения на печать. Наконец, присвойте значение одного объекта другому объекту и выведите результат на печать.

#include <iostream.h>

class SimpleCircle

{

public:

// конструкторы

SimpleCircle;

SimpleCircle(int);

SimpleCircle(const SimpleCircle &);

~SimpleCircle {}

// методы доступа к данным

void SetRadius(int);

int GetRadius const;

//

операторы

const SimpleCircle& operator++;

const SimpleCircle operator++(int);

SimpleCircle& operator=(const SimpleCircle &):

private:

int *itsRadius;

};

SimpleCircle::SimpleCircle

{itsRadius = new int(5);}

SimpleCircle::SimpleCircle(int radius)

{itsRadius = new int(radius);}

SimpleCircle::SimpleCircle(const SimpleCircle & rh$)

{

int val = rhs.GetRadius;

itsRadius = new int(val);

}

SimpleCircle::~SimpleCircle

{

delete itsRadius;

}

SimpleCircleS SimpleCircle :operator=(const SimpleCircle & rhs)

{

if (this == &rhs)

return <<this;

*itsRadius = rhs.GetRadius;

return *this;

}

const SimpleCircle& SimpleCircle::operator++

{

++(*itsRadius);

return *this;

}

// Постфиксный оператор Operator ++(int).

// Выборка, затем инкрементирование

const SimpleCircle SimpleCircle::operator++ (int)

{

// объявляем локальный объект класса SimpleCircle и инициализируем его значением

*this

SimpleCircle ternp(*this);

++(*itsRadius);

return temp;

}

int SimpleCircle::GetRadius const

{

return ~itsRadius;

}

int main

{

SimpleCircle CircleOne, CircleTwo(9);

CircleOne++;

++CircleTwo;

cout << "CircleOne: " << CircleOne.GetRadius << endl;

cout << "CircleTwo: " << CircleTwo.GetRadius << endl;

CircleOne = CircleTwo;

cout << "CircleOne: " << CircleOne.GetRadius << endl:

cout << "CircleTwo: " << CircleTwo.GetRadius << endl;

return 0;

}

9. Жучки: что неправильно в следующем примере использования оператора присваивания?

SQUARE SQUARE::operator=(const SQUARE & rhs)

{

itsSide - new int;

*itsSide = rhs.GetSide;

return *this;

}

Нужно выполнить проверку на равенство объектов rhs и this, в противном случае обращение к оператору а = а приведет к аварийному отказу вашей программы.

10. Жучки: что неправильно в следующем примере использования оператора суммирования?

VeryShort VeryShort::operator+ (const VeryShort& rhs)

{

itsVai += rhs.GetltsVal;

return *this;

}

Этот оператор operator+ изменяет значение в одном из операндов, а не создает с помощью суммирования новый объект VeryShort. Правильно написать следующее:

VeryShort VeryShort::operator+ (const VeryShort& rhs)

{

return VeryShort(itsVal + rhs.GetltsVal);

Поделиться с друзьями: