Тест 20 тема «Перегрузка операций» 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тест 20 тема «Перегрузка операций»



23. Перегрузка операций:

a) преобразовывает операции (operator) C++ для работы с объектами;

b) предоставляет операциям C++ больше, чем они могут обработать;

c) дает новое значение существующим в C++ операциям;

d) создает новые операции C++.

24. Предположим, что класс X не использует перегруженные операции. Напишите выражение, в котором вычитается объект x1 класса X из другого объекта x2 этого же класса. Результат помещается в x3.

25. Предположим, что класс X включает в себя функцию перегрузки операции (-). Напишите выражение, в котором вычитается объект x1 класса X из другого объекта x2 этого же класса. Результат помещается в x3.

26. Истинно ли следующее утверждение: операция >= может быть перегружена?

27. Сколько аргументов требуется для определения перегруженной унарной операции?

28. Предположим, что существует класс C с объектами obj1, obj2 и obj3. Выражение ob3=ob1-obj2 работает правильно. Здесь перегруженная операция должна:

a) принимать два аргумента;

b) возвращать значение;

c) создавать именованный объект;

d) использовать объект, вызвавший операцию, как операнд.

29. Напишите полное определение перегруженной операции ++ для класса Distance. Операция должна увеличивать на единицу переменную класса sm, и при этом должно быть верным выражение: dist++.

30. Повторите задание из вопроса 7, но так, чтобы стало возможным выполнение выражения

dist2=dist1++;

31. Чем отличается объявление перегруженной операции ++ в префиксной форме от описания постфиксной формы?

32. Вот два объявления, предназначенные для складывания двух объектов класса String:

void add String (String s1, String s2);

String operator + (String s);

32.a.1. Рассмотрим, какие из элементов первого объявления соответствуют элементам второго. Заполните пробелы подходящими вариантами из списка:

Имени функции add соответствует _______________________;

Возвращаемому значению (типа void ) соответствует _______________________;

Первому аргументу ( s1 ) _______________________;

Второму аргументу ( s2 ) _______________________;

Объекту, вызвавшему функцию соответствует:

a) аргумент (s1);

b) объект, вызвавший операцию;

c) операция (+);

d) возвращаемое значение (типа String);

e) нет соответствия этому элементу.

11. Истинно ли следующее утверждение: перегруженная операция всегда требует на один аргумент меньше, чем количество операндов?

12. Когда вы перегружаете операцию арифметического присваивания, то результат:

a) передается объекту справа от операции;

b) передается объекту слева от операции;

c) передается объекту, вызвавшему операцию;

d) должен быть возвращен.

13. Напишите полное определение перегруженной операции ++, которая работает с объектами класса String и выполняет изменение шрифта операнда на прописные буквы. Вы можете использовать стандартную библиотечную функцию toupper(), принимающую в качестве аргумента символ, который надо изменить и возвращающую уже измененный символ (или тот же, если изменения не нужно).

14. Для преобразования от определенного пользователем класса к основному типу вы можете использовать:

a) встроенную операцию преобразования;

b) конструктор с одним аргументом;

c) перегруженную операцию =;

d) операцию преобразования, являющуюся членом класса.

15. Истинно ли следующее утверждение: выражение objA=objB будет причиной ошибки, если объекты разных типов?

16. Для преобразования от основного типа к определенному пользователем вы можете использовать:

a) встроенную операцию преобразования;

b) конструктор с одним аргументом;

c) перегруженную операцию =;

d) операцию преобразования, являющуюся членом класса.


Тест 21 тема «Классы и перегрузка операций»

 

2. Предположим, что класс String включает в себя следующие собственные элементы:

class String

{ private:

char* str;

int len;

// …

};

a) Что неверно в конструкторе, заданном по умолчанию?

String::String() {}

b) Что неверно в этом конструкторе?

String::String(const char * s)

{ str = s; len = strlen(s);}

c) Что неверно в этом конструкторе?

String::String(const char * s)

{ strсpy(str, s); len = strlen(s);}

2. Назовите три проблемы, с которыми можно столкнуться при определении класса, в котором элемент-указатель инициализируется с помощью оператора new, и укажите способы решения этих проблем.

3. Какие методы класса компилятор генерирует автоматически, если они не обеспечиваются в явном виде? Опишите поведение этих неявно сгенерированных функций.

4. Найдите и исправьте ошибки в следующем объявлении класса:

class nifty

{//данные

char person[];

int money;

//методы

nifty();

nifty(char * s);

ostream & operator<<(ostream & os, nifty & n);

}

nifty()

{ person=NULL;money=0;}

nifty(char * s)

{person=new char [strlen(s)]; preson=s; money=0;}

ostream & operator<<(ostream & os, nifty & n);

{ os<<n; }

5. Рассмотрим следующее объявление класса:

class Golfer

{private:

char*fullname;

int games;

public:

Golfer();

Golfer(const char * name, int g=0);

Golfer(const Golfer& g);

~ Golfer();};

a) Какие методы класса должны быть вызваны каждым из этих операторов?

Golfer nancy;

Golfer lulu(“Little Lulu”);

Golfer roy(“Roy Hobbs”,12);

Golfer *par= new Golfer;

Golfer next = lulu;

Golfer hazard = “Weed Thwacker”;

*par = nansy;

nancy = “Nansy Putter”;

b) Очевидно, классу для того, чтобы обеспечить его полезность, необходимы и некоторые другие методы. Какой дополнительный метод потребуется для защиты данных от повреждения?

 

 

Тест 22 тема «Классы и перегрузка операций»

 

1. В чем заключается разница между дружественной функцией и функцией-элементом?

2. Может ли функция, не являющаяся членом класса, иметь доступ к элемента класса?

3. Предположим, что a и b – целые переменные, и мы формируем сумму a+b. Теперь предположим, что c и d – переменные с плавающей запятой, и мы формируем сумму c+d. Очевидно, что две операции + использованы здесь в разных целях. Это пример ___________________________________.

4. Ключевое слово ____________ вводит определение перегруженной функции-операции.

5. Верно ли, что в C++ можно перегружать только существующие операции?

6. Какие операции не могут быть перегруженными?

7. Какие ограничения накладываются на перегрузку следующих операций: = () [] ->?

8. Теряет ли оператор при перегрузке что-либо из своей исходной функциональности?

9. Нужно ли перегружать оператор относительно определенного пользователем типа данных, например, класса?

10. Можно ли изменить приоритет перегруженного оператора?

11. Можно ли изменить количество операндов?

12. В каком соотношении находятся старшинство перегруженных и старшинство исходных операций?

13. В каком контексте в C++ может быть использовано имя operator/?

14. Чем действие дружественной оператор-функции отличается от действия оператор-функции класса?

15. Объясните, почему может понадобиться перегрузка оператора присваивания.

16. Может ли функция operator=() быть дружественной?

17. Приведите главный довод в пользу перегрузки оператора []?

18. Рассмотрите следующее объявление класса:

class Cow

{ private:

char name[20];

char * hobby;

double weight;

public:

Cow()

Cow(const char *, const char *, double);

Cow(const & Cow);

~ Cow();

Cow operator=(const Cow &);

void ShowCow(); //отображает имя, любимый корм и вес коровы

};

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

19. Рассмотрите следующее объявление класса array, содержащий массив из 10 целых:

class array

{ private:

int nums[10];

public:

array ()

void Set(int n[10]);

void Show();

array operator+(array ob2);

array operator –(array ob2);

int operator==(array ob2);

};

Обеспечьте реализацию для этого класса и создайте короткую программу, которая использует все функции-элементы. Конструктор класса инициализирует каждый элемент массива нулевыми значениями. Метод Set() должен присваивать всем элементам объекта значения элементов другого массива. Перегруженный оператор (+) должен поэлементно складывать оба операнда. Перегруженный оператор (-) должен вычитать все элементы правого операнда из элементов левого. Перегруженный оператор (= =) должен возвращать true, если все элементы обоих операндов равны, в противном случае возвращать значение false.

 

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 1621; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.150.55 (0.024 с.)