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


Авторские права

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

Здесь можно скачать бесплатно "Джесс Либерти - Освой самостоятельно С++ за 21 день." в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Джесс Либерти - Освой самостоятельно С++ за 21 день.
Рейтинг:
Название:
Освой самостоятельно С++ за 21 день.
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Освой самостоятельно С++ за 21 день."

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



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

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






{

   ListCell *pt = new ListCell( value, head );

   assert (pt ! = 0);

   // эта строка добавляется для обработки хвостового узла

   if ( head == 0 )

      tail = pt;

   head = pt;

   theCount++;

}

template <class Type>

void List<Type>::append( Type value )

{

   ListCell *pt = new ListCell( value );

   if ( head == 0 )

      head = pt;

   else

      tail->next = pt;

   tail = pt;

   theCount++;

}

template <class Type>

int List<Type>::is_present( Type value ) const

{

   if ( head == 0 )

      return 0;

   if ( head->val == value || tail->val == value )

      return 1;

   ListCell *pt = head->next;

   for (; pt != tail; pt = pt->next)

      if ( pt->val — value )

         return 1;

   return 0;

}

4. Объявите три списка объектов: типа Strings, типа Cat и типа int.

List<String> string_list;

List<Cat> Cat_List;

List<int> int_List;

5. Жучки: что неправильно в приведенном ниже программном коде? (Предположите, что определяется шаблон класса List, а Cat — это класс, определенный выше в данной книге.)

List<Cat> Cat_List;

Cat Felix;

CatList.append( Felix );

cout << "Felix is " << ( Cat_List.is_present( Felix ) ) ? "" : "not " << "present\n";

ПОДСКАЗКА (поскольку задание не из самых легких): подумайте, чем тип Cat отличается от типа int.

В классе Cat не определен оператор operator==. Все операции, в которых сравниваются значения членов класса iist, таких как is_present, будут вызывать ошибку компиляции. Для уменьшения вероятности возникновения таких ошибок перед объявлением шаблона поместите обширный комментарий, в котором должно быть указано, какие операторы следует определить в классе для успешного выполнения всех его методов.

6. Объявите дружественный оператор operator== для класса List.

friend int operator==( const Type& lhs, const Type& rhs );

7. Напишите выполнение дружественного оператора operator== для класса List.

template <class Type>

int List<Type>::operator==( const Type& lhs, const Type& rhs )

{

   // сначала сравниваем размеры списков

   if ( lhs.theCount != rhs.theCount )

      return 0; // списки различны

   ListCell *lh = lhs.head;

   ListCell *rh = rhs.head;

   for(; lh != 0; lh = lh.next. rh = rh.next )

      if ( lh.value != rh.value )

         return 0;

   return 1; // если они не различны, то совпадают

}

8. Грешитли оператор operator== той же проблемой, которая существует в упражнении 5?

Да. Поскольку сравнение массива включает сравнение элементов, то для элементов также должен быть определен оператор operator!=.

9. Напишите выполнение функции шаблона, осуществляющей операцию обмена данными, в результате чего две переменные должны обменяться содержимым.

// шаблон swap:

// должен иметь оператор присваивания и конструктор-копировщик, определенные для

класса Туре,

template <class Type>

void swap( Type& lhs, Type& rhs)

{

   Type temp( lhs );

   lhs = rhs;

   rhs = temp;

}

10. Напишите выполнение класса SchoolClass, показанного в листинге 19.8, как списка. Для добавления в список четырех студентов используйте функцию push_back(). Затем пройдитесь по полученному списку и увеличьте возраст каждого студента на один год.

#include <list>

template<class T, class A>

void ShowList(const iist<T, А>& aList); // отображаем свойства вектора

typedef list<Student> SchoolClass;

int main()

{

   Student Harry("Harry". 18);

   Student Sally("Sally", 15);

   Student Bill( "Bill", 17);

   Student Peter("Peter", 16);

   SchoolClass GrowingClass;

   GrowingClass.push_back(Harry);

   GrowingClass.push_back(Sally);

   GrowingClass.push_back(Bill);

   GrowingClass.push_back(Peter);

   ShowList(GrowingClass);

   cout << "Один год спустя:\n";

   for (SchoolClass::iterator i = GrowingClass.begin(); i != GrowingClass.end(); ++i)

      i->SetAge(i->GetAge() + 1);

   ShowList(GrowingClass);

   return 0;

}

//

// Отображаем свойства списка

//

template<class T, class A>

void ShowList(const list<T, А>& aList)

{

   for (list<T, A>::const_iterator ci = aList.begin(); ci != aList.end(); ++ci)

      cout << *ci << "\n";

   cout << endl;

}

11. Измените код из упражнение 10 таким образом, чтобы для отображения данных о каждом студенте использовался объект функции.

#include <algorithm>

template<class T>

class Print

{

   public:

      void operator()(const T& t)

      {

         cout << t << "\n";

      }

}

template<class T, class A>

void ShowList(const list<T, A>& aList)

{

   Print<Student> PrintStudent;

   for_each(aList.begin(), aList.end().PrintStudent):

     cout << endl;

}

День 20

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

1. Что такое исключение?

Это объект, который создается в результате использования ключевого слова throw.

Этот объект является признаком возникновения исключительной ситуации и передается в стек вызовов первого оператора catch, который выполняет обработку этого исключения.

2. Для чего нужен блок try?

Блок try — это набор выражений программы, которые могут создавать исключительные ситуации.

3. Для чего используется оператор catch?

Оператор catch содержит сигнатуру типа исключения, которое он способен обработать. Оператор catch располагается сразу за блоком try и выполняет роль приемника исключения, сгенерированного внутри блока try.

4. Какую информацию может содержать исключение?

Исключение — это объект, способный содержать любую информацию, которую можно определить внутри класса, созданного пользователем.

5. Когда создается объект исключения?

Объекты исключений создаются при вызове ключевого слова throw.

6. Следует ли передавать исключения как значения или как ссылки?

Вообше исключения нужно передавать как ссылки. Если вы не собираетесь модифицировать содержимое объекта исключения, вам следует передать ссылку, определенную с помошью ключевого слова const.

7. Будет ли оператор catch перехватывать производные исключения, если он настроен на базовый класс исключения?

Да, если исключение будет передано как ссылка.

8. Если используются два оператора catch, один из которых настроен на базовое сообщение, а второй ~ на производное, то в каком порядке их следует расположить?

Операторы catch проверяются в порядке их расположения в исходном коде. Причем если первый оператор catch перехватит исключение, то другие операторы catch уже вызываться не будут. Поэтому операторы catch следует располагать в порядке от специфичных (производных) к общим (базовым).

9. Что означает оператор catch(...)?

Оператор catch(...) будет перехватывать все исключения любого типа.

10. Что такое точка останова?

Это позиция в коде, в которой отладчик остановит выполнение программы.

Упражнения 

 1. Запишите блок try и оператор catch для отслеживания и обработки простого исключения.

#include <iostream.h>

class OutOfMemory {};

int main()

{

   try

   {

      int *myInt = new int;

      if (myInt == 0)

         throw OutOfMemory();

   }

   catch (OutOfMemory)

   {

      cout << "Unable to allocate memory!\n";

   }

   return 0;

}

2. Добавьте в исключение, полученное в упражнении 1, переменную-член и метод доступа и используйте их в блоке оператора catch.

#include <iostream.h>

#include <stdio.h>

#include <string.h>

class OutOfMemory;

{

   public:

      OutOfMemory(char *):

      char>> GetString() { return itsString; }

   private:

      char>> itsString;

};

OutOfMemory::OutOfMemory(char * theType)

{

   itsString = new char[80];

   char warning[] = "Out Of Memory! Can't allocate room for: ";

   strncpy(itsString, warning,60);

   strncat(itsString,theType,19);

}

int main()

{

   try

   {

     int *myInt = new int;

     if (myInt == 0)

        throw OutOfMemory("int");

   }

   catch (OutOfMemory& t:heException)

   {

      cout << theException.GetString();

   }

   return 0;

}

3. Унаследуйте новое исключение от исключения, полученного в упражнении 2. Измените блок оператора catch таким образом, чтобы в нем происходила обработка как производного, так и базового исключений.

1: #include <iostream.h>

2:

3: // Абстрактный тип исключений

4: class Exception

5: {

6:    public:

7:       Exception(){}

8:       virtual ~Exceptiori(){}

9:       virtual void PrintError() = 0;

10: };

11:

12: // Производный класс для обработки проблем памяти

13: // Обратите внимание: в этом классе не производится выделение памяти

14: class OutOfMemory : public Exception

15: {

16:    public:

17:       OutOfMemory(){}

18:       ~OutOfMemory(){}

19:       virtual void PrintError();

20:    private:

21: };

22:

23: void OutOfMemory::PrintError()

24: {

25:    cout << "Нет памяти !!\n";

26: }

27:

28: // Производный класс для обработки ввода неверных чисел

29: class RangeError : public Exception

30: {

31:    public:

32:       RangeError(unsigned long number){badNumber = number:}

33:       ~RangeError(){}

34:       virtual void PrintError();

35:       virtual unsigned long GetNumber() { return badNumber; }


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Освой самостоятельно С++ за 21 день."

Книги похожие на "Освой самостоятельно С++ за 21 день." читать онлайн или скачать бесплатно полные версии.


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

Все книги автора Джесс Либерти

Джесс Либерти - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

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

А что Вы думаете о книге? Оставьте Ваш отзыв.