Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Упражнения. 1. Представьте объявление класса SimpleCircle (простая окружность) с единственной переменой-членом itsRadius (радиус)






 

1. Представьте объявление класса SimpleCircle (простая окружность) с единственной переменой-членом itsRadius (радиус). В классе должны использоваться конструктор и деструктор, заданные по умолчанию, а также метод установки радиуса.

class SimpleCircle

{

public:

SimpleCircle();

~SimpleCircle();

void SetRadius(int);

int GetRadiusO;

private:

int itsRadius;

};

2. Используя класс, созданный в упражнении!, с помошью конструктора, заданного по умолчанию, инициализируйте переменную itsRadius значением 5.

SimpleCircle:: SimpleCircle():

itsRadius(5);

{ }

3. Добавьте в класс новый конструктор, который присваивает значение своего пара-

метра переменной itsRadius.

SimpleCircle:: SimpleCircle(int radius):

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());

}

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.