LibKing » Книги » comp-programming » Джесс Либерти - Освой самостоятельно С++ за 21 день.

Джесс Либерти - Освой самостоятельно С++ за 21 день.

Тут можно читать онлайн Джесс Либерти - Освой самостоятельно С++ за 21 день. - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Джесс Либерти - Освой самостоятельно С++ за 21 день.
  • Название:
    Освой самостоятельно С++ за 21 день.
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4.11/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Джесс Либерти - Освой самостоятельно С++ за 21 день. краткое содержание

Освой самостоятельно С++ за 21 день. - описание и краткое содержание, автор Джесс Либерти, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков. Отдельное занятие посвящено вопросам объектно-ориентированного анализа и проектирования приложений. Подробно рассмотрены все средства и подходы конструирования собственных пользовательских классов.

Книга рассчитана на широкий круг читателей, интересующихся современными проблемами программирования.

Освой самостоятельно С++ за 21 день. - читать онлайн бесплатно полную версию (весь текст целиком)

Освой самостоятельно С++ за 21 день. - читать книгу онлайн бесплатно, автор Джесс Либерти
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

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 <

}

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

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

const SimpleCircle SimpleCircle::operator++ (int)

{

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

*this

SimpleCircle temp(<

++(*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

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 <

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

}

День 11

Контрольные вопросы

1. Что такое v-таблица?

V-таблица, или таблица виртуальных функций, является обычным средством управления виртуальными функциями в C++, используемым компилятором. Эта таблица хранит список адресов всех виртуальных функций и обеспечивает вызов правильной функции в зависимости от указываемого типа объекта во время выполнения программы.

2. Что представляет собой виртуальный деструктор?

Деструктор любого класса, который может быть объявлен виртуальным. Во время выполнения программы при применении delete к указателю на определенный тип объекта будет вызван деструктор соответствующего типа.

3. Можно ли объявить виртуальный конструктор?

Виртуальных конструкторов не существует.

4. Как создать виртуальный конструктор-копировщик?

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

5. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция была замещена?

Base::FunctionName();

6. Как вызвать функцию базового класса из объекта производного класса, если в производном классе эта функция не была замещена?

FunctionName():

7. Если в базовом классе функция объявлена как виртуальная, а в производном классе виртуальность функции указана не была, сохранится ли функция как виртуальная в следующем произведенном классе?

Да, виртуальность наследуется и не может быть отменена.

8. С какой целью используется ключевое слово protected?

Защищенные члены (которые объявлены с использованием ключевого слова protected) доступны для функций-членов производных объектов.

Упражнения

1. Объявите виртуальную функцию, которая принимает одно целочисленное значение и возвращает void.

virtual void SomeFunction(int);

2. Запишите объявление класса Square (квадрат), произведенного от класса Rectangle (прямоугольник), который, в свою очередь, произведен от класса Shape (форма).

class Square : public Rectangle

{ };

3. Предположим, что в предыдущем примере объект класса Shape не использует параметры, объект класса Rectangle принимает два параметра (length и width), а объект класса Square — один параметр (length); запишите конструктор для класса Square.

Square::Square(int length):

Rectangle(length, length)}}

4. Запишите виртуальный конструктор-копировщик для класса Square, взятого из упражнения 3.

class Square

{

public:

// ...

virtual Square * clone() const { return new Square(*this); }

// ...

};

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

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Джесс Либерти читать все книги автора по порядку

Джесс Либерти - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Освой самостоятельно С++ за 21 день., автор: Джесс Либерти. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img