Программирование >>  Дополнительные возможности наследования 

1 ... 255 256 257 [ 258 ] 259 260 261 ... 265


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;

template <class Туре> List<Type>;:List() {

ListCell *pt = head;

while ( pt ) {

ListCell *tmp = pt; pt = pt->next; delete tmp;

head = tail = 0;

template <class Type>

void List<Type>:;insert(Type value)

ListCell pt = new ListCell( value, head ); assert (pt != 0);

эта строка добавляется для обработки хвостового узла if ( head == О ) tail = pt;



ListCell pt = head->next; for (; pt 1= tail; pt = pt->next) if ( pt->val == value ) return 1;

return 0;

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

List<String> string.list; List<Cat> Cat.Llst; List<lnt> 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==. Все операции, в которых сравниваются значения членов класса List, таких как is present, будут вызывать ошибку компиляции. Для уменьшения вероятности возникновения таких ошибок перед объявлением шаблона поместите обширный комментарий, в котором должно быть указано, какие операторы следует определить в классе для успешного выполнения всех его методов.

6. Объявите дружественный оператор operator== для класса List, friend int operator==( const Type& Ihs, const Type& rhs );

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

int List<Type>;;operator==( const Type& Ihs, const Type& rhs ) {

сначала сравниваем размеры списков if ( Ihs,theCount != rhs,theCount ) return 0; списки различны

ListCell Ih = Ihs,head; ListCell *rh = rhs,head;

for(; Ih != 0; Ih = lh,next, rh = rh,next ) if ( Ih,value != rh,value )



return 0;

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

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

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

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

шаблон swap:

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

класса Туре,

template <class Туре>

void swap( Туре& Ihs, Туре& rhs)

Type temp( Ihs ); Ihs = rhs; rhs = temp;

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

ftinclude <list> template<class Т, class А>

void ShowList(const lisKT, A>& atist); отображаем свойства вектора

typedef list<Student> SchoolClass;

int main()

Student HarryCHarry , 18); Student SallyCSally , 15); Student Bill( Bill , 17); Student PeterCPeter , 16);

SchoolClass GrowingClass; GrowingClass.push back(Harry); GrowingClass.push back(Sally); GrowingClass.push back(Bill); GrowingClass.push back(Peter); ShowLiSt(GrowingClass);

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



1 ... 255 256 257 [ 258 ] 259 260 261 ... 265

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика