Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

hkjCJgcQqF

.pdf
Скачиваний:
2
Добавлен:
15.04.2023
Размер:
810.94 Кб
Скачать

{

if (area_<0) // Если пока что не вычислено

{

CalcArea(); // Вычисляем

}

return area_;

}

private:

void InvalidateArea () { area_ = -1; } void CalcArea ()

{

area_=0; vector<Point>::iterator i;

for (i=points_.begin(); i!=points_.end(); ++i ) area_+= /* некоторое вычисление */;

}

 

vector<Point> points_;

 

double area_;

 

};

 

Polygon operator+(Polygon lhs,

Polygon rhs )

{

 

Polygon ret= lhs;

 

int last = rhs.GetNumPoints();

 

for (int i=0; i< last; ++i )

// конкатенация

{

ret.AddPoint ( rhs.GetPoint( i ) );

}

return ret;

}

void f ( const Polygon & poly )

{

const_cast<Polygon &>(poly).AddPoint (Point (0, 0) );

}

void g (Polygon & const rPoly )

{rPoly.AddPoint (Point (1, 1 ) ); } void h (Polygon * const rPolt )

{rPoly->addPoint (Point ( 2, 2 ) ); }

int main ( )

{

Polygon

poly;

const Polygon cpoly; f(poly);

f(cpoly);

g(poly);

123

d;
f;

h(&poly);

}

 

 

2. Приведите

возможные

последовательности

определенных

пользователем пребразований для следующих инициализаций? class LongDouble {

operator double (); operator float (); };

extern LongDouble ldObj;

(a)int ex1 = ldObj;

(b)float ex2 = ldObj;

Шаблоны функций

1. Пусть дано следующее определение шаблона функции sum( ): template <class T1, class T2, class T3>

T1 sum (T2, T3 );

Какие из приведенных ниже вызовов ошибочны? Почему? double dobj1, dobj2;

float fobj1, fobj2; char cobj1, cobj2;

(a)sum (dobj1, dobj2 );

(b)sum<double, double, double> (fobj1, fobj2 );

(c)sum<int> (cobj1 , cobj2 );

(d)sum<double, , double> ( fobj2, dobj2 );

2.Пусть дано следующее определение шаблона функции sum(): template <typename Type>

Type sum( Type op1, char op2 );

Как написать явное объявление конкретизации этого щаблона с аргументом типа string?

3. Имеются следующие объявления функций:

template <typename T1, typename T2> void g(T1, T2); //(1)

template <typename T> void g ( T );

//(2)

template <typename T> void g (T, T );

//(3)

template <typename T> void g (T* );

//(4)

template <typename T> void g (T*, T);

//(5)

template <typename T> void g (T , T* );

//(6)

template <typename T> void g ( int , T* );

//(7)

template <> void g<int>( int );

//(8)

void g (int , double );

//(9)

void g( int );

//(10)

Какие из этих функций будут вызваны в каждой из следующих инструкций? Где это возможно, укажите типы параметров шаблонов.

int i; double float

124

complex<double> c;

g ( i );

(a)

g <int>( i );

(b)

g ( i, i );

(c)

g ( c );

(d)

g ( i, f );

(e)

g ( i, d );

(f)

g (c, &c );

(g)

g (i, &d );

(h)

g (&d, d );

(i)

g ( &d );

(j)

g (d, &i );

(k)

g (&i, &i );

(l)

4. Рассмотрите следующий код: template<typename T> void f (T& t)

{

typename T::value_type* p1 = &t[0]; typename T::value_type* p2 = &*t.begin(); // работаем с *p1 и *p2

}

Корректен ли данный код?

5. Что такое typename и что делает это ключевое слово?

125

Заключение

Первая часть данного пособия позволяет освоить курс программирования на С++ на основе объектно-ориентированной методологии. Центральным элементом ООП является инкапсуляция соответствующего множества типов данных и действий над ними. Пособие может успешно применяться в качестве дополнительной литературы в курсе по структурам данных.

Литература

Основная

1.Бьерн Страуструп. Программирование: принципы и практика использования C++.Издание третье исправленное. Пер. с англ. Изд. Вильямс2011г. -1248стр., с ил., ISBN: 978-5-8459

2.Герберт Шилдт. C++: базовый курс. изд. Вильямс. 3-е издание Пер. с англ.-2010г.-624с., ил. ISBN 978-5-8459-0768-4

3.Герберт Шилдт. Полный справочник по С++, 4-изд.: Пер. с англ.-М- издательский дом “Вильямс”, 2004.-800 с.:ил.ISBN 5-8459-0489-7

4.Р.Лафоре. Объектно-ориентированное программирование в С++. Издательство: Питер, Пер. с англ. 2011г. -923с., ил. ISBN 978-5-4237-0038-

5.Лажойе Ж. Липпман С. Весь С++. От азов до совершенства. ДМК Пресс Невский диалект. Пер.с англ. 2007. 1104 с., ил. ISBN 5-94074-367-6, 5- 7940-0070-8, 0-201-82470-1

6.Стенли Б. Липпман , Жози Лажойе , Барбара Му. Язык программирования С++. Вводный курс.Изд.Вильямс, 2007. -896с., ил. ISBN 5-8459-1121-4б 0-201-72148-1.

7.Стенли Б. Липпман , Жози Лажойе. Язык программирования С++. Вводный курс. Издательства: Невский Диалект, ДМК Пресс, Пер.с англ. 2001г. -1104с., ISBN 5-7940-0070-8, 5-94074-040-5.

8.Дэвид Вандевурд , Николаи М. Джосаттис. Шаблоны C++: справочник разработчика. : Пер. с англ. — М. : Издательский дом "Вильяме", 2003. —

544с.: ил. ISBN 5-8459-0513-3 (рус.)

Дополнительная

1.Роберт Седжвик. Алгоритмы на С++. Издательство :Вильямс. Пер. с англ.- 2011-1056с., ил. ISBN 978-5-8459-16650-1.

2.Герб Саттер. Новые сложные задачи на C++: 40 новых головоломных примеров с решениями. изд. Вильямс.-2008.-272с., ил. ISBN 5-8459-0823-1

126

Содержание

 

Введение

6

Глава 1. Классы и объекты

9

Конструкторы и деструкторы

10

Объявление объекта

11

Реализация класса

12

Реализация конструктора

12

Создание объектов

13

Объекты и передача информации

13

Указатель this

14

Массивы объектов

16

Множественные конструкторы

16

Конструкторы с одним параметром

19

Статические члены класса

19

Статические функции-члены

21

Дружественные функции

22

Дружественные классы

23

Лабораторная работа № 1-а Тема: Создание классов.

24

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

31

Лабораторная работа № 1-б Тема: Объекты и классы языка С++

32

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

33

Задание для самостоятельной работы Тема: Создание и использование

 

классов

33

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

38

Глава 2. Перегруженные функции

39

Перегрузка и область видимости

40

Указатели на перегруженные функции

41

Шаги разрешения перегрузки

41

Преобразования типов аргументов

43

Стандартное преобразование

45

Ссылки

47

Аргументы со значениями по умолчанию

49

127

 

Лабораторная работа № 2 Тема: Перегруженные функции

50

Задание для самостоятельной работы

55

Глава 3. Перегрузка операторов и преобразования, определенные

 

пользователем

56

Операторные функции

66

Друзья

68

Оператор взятия индекса

72

Оператор вызова функции

73

Оператор “стрелка”

74

Создание префиксной и постфиксной форм операторов

 

инкрементации и декрементации

76

Перегрузка операторов new и delete

76

Перегрузка оператора “,”

78

Определяемые пользователем преобразования

79

Конвертеры

81

Конструктор как конвертер

85

Выбор преобразования

87

Лабораторная работа № 3 Тема: Перегруженные операторы

90

Задание для самостоятельной работы

101

Глава 4. Шаблоны функций

103

Обобщенные функции

103

Инстанцирование

104

Параметры шаблонов

109

Явное задание аргументов шаблона

111

Явная специализация шаблона

111

Лабораторная работа № 4 Тема: Шаблоны функций в языке С++

114

Задание для самостоятельной работы

117

Тестовое задание

118

Классы и объекты

118

Перегруженные функции

121

Перегрузка операторов и преобразования, определенные

 

пользователем

122

128

Шаблоны функций

124

Заключение

126

Литература

126

Содержание

124

129

Яковлева Людмила Владимировна

Практикум по объектно-ориентированному программированию в С++

Учебно-методическое пособие

Часть 1

Науч. ред. Б.М. Верещагин

Подписано в печать 31.03.2011 г. Формат 60×90/16. Усл. печ. л. 7,8. Тираж 50 экз.

Отпечатано в редакционно-издательском отделе (РИО) МГГУ.

Мурманский государственный гуманитарный университет. 183720, г. Мурманск, ул. Капитана Егорова, 15.

130

131

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]