Лабораторная работа №8 «Объектно-ориентированное проектирование» 


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



ЗНАЕТЕ ЛИ ВЫ?

Лабораторная работа №8 «Объектно-ориентированное проектирование»



Цель: научиться производить объектно-ориентированный анализ предметной области, строить диаграммы классов, реализовывать программное обеспечение на основе проделанного анализа и проектирования.

Задание 1. Произвести декомпозицию объекта. Написать программное обеспечение для расчета количества материала и стоимость производства объекта.

1. Стол.

2. Стул.

3. Тумба для обуви.

4. Комод.

5. Шкаф-сушка.

6. Кухонная тумба.

7. Стационарный компьютер.

8. Велосипед.

9. Набор посуды.

10. Комплект постельного белья.

 

Задание 2. Выполнить объектно-ориентированное проектирование предметной области. Разработать программу на основании полученного проекта.

Прежде, чем приступать к разработке программного кода, согласовать проект с преподаватеоем.

Вариант 1

Учебное заведение осуществляет подготовку по двух направлениям: программисты и связисты. В конце обучения учащиеся сдают комплексный итоговый экзамен, состоящий из двух дисциплин. В качестве первой дисциплины все студенты сдают иностранный язык. Второй экзамен сдается по дисциплине специализации. Для программистов это программирование для связистов это теория электросвязи.

Написать программу для заполнения и вывода на экран экзаменационной ведомости. Предусмотреть возможность сортировки по среднему баллу.

 

Вариант 2

Карта клиента может иметь статус обычная и VIP. Карта имеет номер, ФИО и телефон владельца, накопительный счет, срок действия. VIP дополнительно имеет размер скидки.

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

 

Вариант 3

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

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

Написать программу для создания тестов и проведения тестирования студентов.

 

Вариант 4

В файле находится текст. В первое строке текста находится кодовое слово, позволяющее определить, каким алгоритмом зашифрован текст. Текст может быть зашифрован одним из алгоритмов: «А1» и «А2».

Алгоритм А1. Два соседних символа меняются местами.

Алгоритм А2. Слова записаны в обратном порядке.

Написать программу позволяющую зашифровывать и расшифровывать тексты.

 

Вариант 5

Интернет-магазин продает телефоны. Каждый товар имеет название, цену, дату поставки, производитель. Проводные телефоны характеризуются: наличием автоответчика, определителя номера. Мобильные телефоны характеризуются: стандарт связи, поддержка двух SIM-карт, платформа.

Написать программу для ведения каталога товаров, а также поиска товаров по следующим критериям: найти товары-новинки; найти товары по заданному ценовому диапазону.

Вариант 6

В библиотеке хранятся книги и периодические издания: газеты и журналы. Книга характеризуется: название, авторы, издательство, год издания, кол-во страниц. Журналы и газеты характеризуется: название, год, номер, издательство.

Написать программу для ведения каталога библиотеки.

Названия выводить в следующем формате:

1. Куперштейн, В.И. Современные информационные технологии в делопроизводстве и управлении / В.И. Куперштейн. – Спб: БХВ, 2000. – 248.

2. Вести института современных знаний. 2009. -№2.

Вариант 7

Карта клиента может быть выдана либо на определенный срок, либо на количество раз использования. Карта имеет номер, дату выдачи, ФИО лица, выдавшего карту.

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

Вариант 8

Имеются фигуры двух видов – круг и эллипс, каждая из которых определяется координатами центра.

Написать программу для вычисления площади заданных фигур.

 

Вариант 9

На предприятии возможны два типа трудовых отношений: работа в штате и работа по договору подряда. Для штатных сотрудников заработная плата назначается исходя из оклада, размера надбавки (% от оклада) и премии, а также в случае отсутствия на работе (отпуск болезнь и др.) оклад выплачивается пропорционально отработанным дням. Для сотрудников, работающих по договору подряда, заработная плата начисляется исходя из ставки за час и количества отработанных часов за период. 

Написать программу для начисления заработной платы и формирования ведомости для выдачи заработной платы.

Вариант 10

В магазине товары могут продаваться поштучно, а могут по весу. Для товаров продающихся поштучно магазин устанавливает цену за штуку, при заказе товара покупатель вводит количество необходимых ему единиц товара. Для товаров продающихся на развес магазин устанавливает цену за килограмм, при заказе товара покупатель указывает необходимый ему вес. На все товары магазин может устанавливать скидки (в %).

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


 

8. Тестовые задания

Тестовые задания к главе 1

Теоретические вопросы

1. Код на языке программирования С++:

А) компилируется в двоичный код и запускается на выполнение;

Б) выполняется интерпретатором языка, встроенным в веб-браузер;

В) компилируется в байт-код и выполняется Java-машиной;

Г) нет правильного ответа.

2. Главная функция программы на языке С++ называется:

А) main

Б) begin

В) start

Г) нач.

Д) зависит от компилятора.

3.  Комментарии в языке С++ заключается в

А){}

Б) []

В) begin end

Г) /* */

Д<??>

4.  Для доступа к элементам массива в языке С++ используется

А){}

Б) []

В) ()

Г).

Д) ->

5. Признаком окончания команды является символ:

А);

Б):

В).

Г),

Д)*

6. Переменная в языке С++

А) принимает параметры, вычисляет алгоритм, возвращает значение.

Б) адрес поля в памяти, занимаемого программным объектом.

В) область памяти, предназначенная для хранения данных.

Г) структура однотипных элементов, занимающих непрерывную область памяти.

Д) нет правильного ответа.

7. Какого встроенного типа данных не существует в языке С++:

А) char

Б) int

В) float

Г) double

Д) array

Е) все существуют.

8. Какой операции не существует в языке С++:

А)+

Б)++

В)=

Г)==

Д)+=

Е) все существуют.

9. У каких операций всегда вычисляются все операнды (выберите все подходящие варианты)?

А) ||

Б)&& (2 амперсанда)

В) %

Г)?: (тернарный оператор)

10. Выберите правильный вариант объявления массива из 10 элементов целого типа:

А) int A[10];

Б) A=int[10];

В) A= new int[10];

Г) float A[10]

Д) int [10] A;

Е) нет правильного ответа

11. Индексация массива в языке C++ начинается с:

А)0

Б)1

В)-1

Г) с любого значения

Д)зависит от компилятора

Е)нет правильного ответа.

12. Что из приведенных относится к средствам выводы в языке С++:

А) cin

Б) cout

В) echo

Г) writeln()

Д) System.out.print()

Е) нет правильного ответа.

13. Для реализации условных алгоритмов в языке С++ можно использовать:

А)?

Б) if

В) switch

Г) for

Д) do while

Е) while

14. Сколько операторов return может содержать функция в языке С++

А) ровно один;

Б) не более двух;

В) несколько;

Г) два;

Д) нет правильного ответа.

15. Выберите правильный вариант определения функции, которая принимает два целочисленных параметра и возвращает целочисленное значение.

А) int testFunc(int a, int b){ return 1;}

Б) (int a, int b)testFuncint { return 1;}

В) { return 1;} testFunc (int a, int b) int

Г) int testFunc(int a){ return 1;}

Д) все верны.

16. Чем отличается прототип от объявления.

А) В прототипе не указываются названия формальных параметров.

Б) В прототипе отсутствует тело.

В) В конце ставится «;».

Г) А Б В.

Д) Нет правильного ответа

17. При использовании динамического способа выделения память под программный объект выделяется

А) при компиляции.

Б) при запуске программы.

В) в процессе выполнения по мере необходимости.

Г) в зависимости от компилятора.

18. Какое выражение является неверным:

А) Назначение указателей – работа напрямую с адресами.

Б) Назначение оператора return – выйти из функции и, если необходимо, вернуть вычисленное значение.

В) Назначение оператора delete – освободить динамическую память, выеленную оператором new.

Г) В С++ параметры в функцию можно передать по значению, либо через указатели (адреса).

Д) Все выражения верны.

Е) Во всех выражениях есть неточности.

19. В С++ существуют

А) функции без параметров

Б) функции с параметрами по умолчанию

Г) параметры у функции main

Д) функции с переменным числом параметров

Е) все верно.

 

20. С помошью какого оператора на экран будет выведена последовательность 12345

А) for(i=0;i<5;)cout<<i++;

Б) for(i=1;i<=5;i++)cout<<i;

В) i=0;while(i<=5)cout<<i++;

Г) while(i<=5)cout<<i++;

Д) все из выше перечисленных

Е) нет правильного ответа.

 

Практические задания

1. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

int a=3;

cout<<a==0?1:2;

А)1

Б)2

В)3

Г)ошибка компиляции.

2. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

short hand = 42; int b=0;

if (hand < 50 &&!b) /* Line 7 */

hand++;

if (hand > 50); /* Line 9 */

else if (hand > 40)   {

hand += 7;

hand++;

   }

else

       --hand;

cout<<hand;

А)41

Б)42

В)50

Г)51

3. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода, если переменная с принимает значение 1:

switch(c){

case 1:

case 2: cout<<” два ”;

case 3: cout<<” три ”;break;

default: cout<<” нет ”;;

}

А) ничего не будет выведено

Б)два

В)три

Г)дватри

Д)два три

Е) нет

4. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

for (int z=0; z < 4; z++) {

switch (z) {

case x: cout<<"0 ";

default: cout<<"def ";

case x-1: cout<<"1 ";

break;

case x-2: cout<<"2 ";

   }

}

А) 0 def 1

Б) 2 1 0 def 1

В) 2 1 0 defdef

Г) 2 1 0 def 1 def 1

5. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

int x = 12;
while (x < 10) {
x--;
}
cout<<x;

А)0.

Б) cout никогда не будет выполнен.

В)10

Г) 12

6. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

int i = 1;
do while(i < 1)
cout<<"i = " << i++;
while (i > 1);
А) Ошибка компиляции.

Б) i=1

В) i=2

Г) Программа зациклится.

Д) Программа зациклится, но ничего на экран не выведет.

7. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

const int x = 1;

int main() {

int x = 2; //1

for (x = 3; x < 5; x++); //2

cout <<" x =" << x;

}
А) x=1

Б) x=3

В) x=5

Г) Ошибка компиляции в строке 1

Д) ошибка компиляции в строке 2.

8. Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

for(int i=0;i<10;i++){

if(i==3||i==5)continue;

if(i==7)break;

cout<<i;

}

А) ничего не будет выведено

Б)0123456789

В)01246

Г) 012468

Д)357

Е)нетправильного ответа

9.  Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

M[]={5,6,7,8,9,1,2,3,4,5};

int i=7;

cout<<M[++i]/2<<*(M+i)+M[2];

А) 1 10

Б) 1,5 10

В) 2 10

Г) 2 8

Д) нет правильного ответа.

10 Дан фрагмент программного кода

int main (int argc, char * argv []){

   String biz = argv[1];

   String baz = argv[2];

   String rip = argv[3];

cout<<"Arg is " << rip;

}

Как вызвать программу из командной строки, чтобы на экран было выведено: Arg is 2

А) Myfile 222

Б) Myfile 1 2 2 3 4

В) Myfile 1 3 2 2

Г) Myfile 0 1 2 3

11  Что будет выведено на экран в результате выполнения следующего фрагмента программного кода: #include<iostream> using namespace std; void f() {    cout<<”Hello”<<endl; } main (){ }

А) Ничего не будет выведено.

Б) Hello

В) Ошибка – функция объявлена, но не вызвана.

Г) Ошибка – функция определена, но не объявлена

Д) Ошибка – тело функции main () пусто.

12.  Что будет выведено на экран в результате выполнения следующего фрагмента программного кода:

#include<iostream>

using namespace std;

void f(int a, int* b) {

   a++;

   *b++;

   cout<<a<<*b<<endl;

}

main() {

int c=1;b=1;

cout<<c<<d<<endl;

   f(c,&d);

cout<<c<<d<<endl;

}

А) 112212

Б)11

22

12

В)11

22

11

Г) 112211

Ответы

Теоретические вопросы

1) А 2) А 3) Г 4) Б 5) А 6) В 7) Д 8) Е 9) В 10) АВ 11) А 12) Б 13) АБВ 14) В 15) А 16)Г 17) В 18) Д 19) Е 20)БВ

Практические задания

1) Б 2) Г 3) Г 4) Г 5) Г 6) Д 7) В 8) В 9) А 10) В 11) А 12) Б


 

Тестовые задания к главе 2

Теоретические вопросы

 

1. Составными элементами класса являются:

А) имя;

Б) свойства;

В) методы;

Г) все указанные выше.

2. Каких методов доступа не существует?

А) public.

Б) protected.

В) private.

Д) common.

Е) friend.

3. По умолчанию члены класса в языке С++ имеют модификатор доступа:

А) public;

Б) protected;

В) private;

Г) не имеют идентификатора доступа.

4. Для доступа к элементам класса в главной программе используется операция:

А).

Б)[]

В)::

Г)-

Д)->

5. Для определения метода класса за пределами класса используется оператор:

А).

Б)[]

В)::

Г)-

Д)->

6. Конструктор может использоваться для:

А) инициализации значений свойств объекта;

Б) динамического выделения памяти для свойств;

В) открытия необходимых файлов;

Г) установки параметров экрана и других устройств;

Д) все перечисленное выше.

7. В классе может быть:

А) ровно один конструктор и ровно один деструктор.

Б) много конструкторов и ровно один деструктор.

В) много конструкторов и много деструкторов.

Г) ровно один конструктор и много деструкторов.

Д)не больше двух конструкторов и ровно один деструктор.

Е) нет правильного ответа.

8. Какое утверждение неверно относительно конструктора:

А) Специальный метод, который имеет тоже имя, что и класс.

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

Б) Не возвращает значение. В нем не допускается использование оператора return.

В) Может быть вызван только через оператор new один раз, когда создается экземпляр класса.

Г) Не наследуются.

Д) Не может быть перегружен.

9. Метод, который вызывается автоматически при создании экземпляра объекта, называется:

А) конструктор;

Б) деструктор;

В) setter;

Г) getter;

Д) inline функция.

10. Сколько параметров может принимать деструктор:

А)0;

Б)1;

В)2;

Г) нет правильного ответа.

11. Как правильно прочитать x.y:

А) свойство y объекта, на который указывает x;

Б) свойство y объекта x;

В) свойство x объекта y;

Г) нет правильного ответа.

12. Выполните соответствие

1  Inline-функция А) Функции, которые имеют одинаковые имена, но отличаются набором параметров.
2  Перегруженная функция Б) Функция, чье тело подставляется в каждую точку вызова, вместо того, чтобы генерировать код вызова
3  Константный метод В) Метод, который работает со статическими экземплярами класса.
4  Статический метод Г) Метод, который не может менять значений свойств объекта.

13. Выбрать правильное определение класса, который содержит в качестве свойства число целого типа, а также конструктор и метод, который возвращает квадрат данного числа.

А) class T{int a;

         public: T(int a_){a=a_};

         int getSq(){return a*a;}};

B) class T{int a, aa;

         public: T(int a_){a=a_};

         void getSq (){aa= a*a;}};

C) class T{int a;

         public: T(int a_){a=a_};

         void getSq (){cout<< a*a;}};

14.  Выбрать правильное определение метода класса T, содержащего в качестве свойства int a, который возвращает квадрат свойства а.

А) T int getSq(){return a*a;}

Б) int Т:getSq(){return a*a;}

В) int Т::getSq(){return a*a;}

Г) int Т::getSq{return a*a;} ()

15. Что произойдет при попытке компиляции приведенного фрагмента программного кода

class A{int a;

public:A(){}; //1

getA(){return a;}// 2

};

int main(){A B; //3

B. a =5; //4

}

А) Компиляция пройдет успешно.

Б) Ошибка в строке 1.

В) Ошибка в строке 2.

Г) Ошибка в строке 3.

Д) Ошибка в строке 4.

16.  Какого из ключевых слов нет в языке С++:

А) this

Б) friend

В) static

Г) const

Д) все есть.

17. Переменная tmp используется для промежуточных расчетов в методе. Она должна быть объявлена как:

А) свойство класса;Б) локальная переменная внутри метода, в котором используется;В) переменная в функции main() и передана в качестве параметра в метод класса;

Г) глобальная переменная.

18.  Что будет выведено на экран в результате выполнения приведенного фрагмента программного кода:

#include <isotream> using namespace std; void f (){ static int i=0; ++ i; cout << i << " "; } main (){ f (); f (); f (); }

A) 1 1 1

Б) 0 0 0

В) 3 2 1

Г) 1 2 3

19. Дан фрагмент программного кода:

class Example{

public: int a,b,c;

Example(){a=b=c=1;} //Constructor 1

Example(int a){a = a; b = c = 1;} //Constructor 2

Example(int a,int b){a = a; b = b; c = 1;} //Constructor 3

Example(int a,int b,int c){ a = a; b = b; c = c;} //Constructor 4

}
Какой из перегруженных конструкторов будет вызван в результате выполнения команды:

Example obj = new Example (1,2,3.3);

А) Constructor 2

Б) Constructor 4

В) Constructor 1

Г) Constructor 3

Д) Ошибка несоответствия типов.

20.   Функция, которая не является членом класса, но имеет доступ к закрытым и защищенным членам класса объявляется с помощью ключевого слова:

А) const

Б) friend

В) static

Г) global

Д) нет правильного ответа.

 

Практические задания

Дан фрагмент программного кода:

class circle {

double radius; // радиус

string color;  // цвет

public:

circle(double r = 1.0, string c = "red") { radius = r; color = c; }

double getRadius() {   return radius; }

string getColor() {    return color; }

};

int main() {

circle c1(1.2, "blue");

cout<<"Radius=" << c1.getRadius()<<" Color=" << c1.getColor()<<endl;

circle c2(3.4); // default color

cout<<"Radius=" << c2.getRadius()<<" Color=" <<c2.getColor()<<endl;

circle c3; // default radius and color

cout<<"Radius=" << c3.getRadius()<<" Color="<< c3.getColor()<<endl;

return 0;

}

1. Что будет выведено на экран в результате его выполнения:

А) Radius=1.2 Color=blue Radius=3.4 Color=red Radius=1.0 Color=red

Б) Radius=1.2 Color=blue

Radius=3.4 Color=

Radius=Color=

В) Radius=1.2 Color=blue Radius=3.4

Г) Radius=1.2 Color=blue

Radius=3.4 Color=red

Radius=1.0 Color=red

2. Установить соответствие:

1.класс А. c1
2.свойство Б. getRadius
3.метод В.Radius
4.экземпляр класса Г.circle

3. Какая команда является недопустимой:

А) cout << "Radius=" << c1.radius;

Б) cout << "Radius=" << c1.getRadius;

В) cout << "Radius=" << c1.getRadius();

Г) все допустимы.

4. Какой вариант можно использовать, чтобы изменить значения всех свойств объекта circle:

А) void setVal(double r = 1.0, string c = "red"){radius=r; color=c;}

Б) void setVal(double r = 1.0, string c = "red"){radius= c; color =r;}

В) void setRadius(double r){radius=r; }

void setColor(string c = "red") { color=c;}

5. С учетом методов определенных в пункте 4 как в главной программе можно изменить свойства у объекта c 3: присвоить радиус 3, а цвет красный

А) с3. r =3; c 3. c =” red ”;

Б) с3. setRadius (3);

с 3.setColor("red");

В) с 3. setVal(3,”red”);

Г) с 3.setRadius(5); с 3.setColor("white");

6. Метод, который возвращает площадь круга:

А) double getArea() {return radius*radius*3.1416; }

Б) void getArea() { double S; S= radius*radius*3.1416; }

В) double getArea(double radius) {return radius*radius*3.1416; }

Г) void getArea() { double S; S= radius*radius*3.1416; return S; }

7. Какой вариант можно использовать, чтобы вывести на экран площадь объекта c2 («Area=3.14»)

А) cout<< " Area=" << c2.getArea()<< endl;

Б) cout<< " Area=" << c2.radius* c2.radius*3.14<< endl;

В) cout<< " Area=" << c2.getRadius()* c2.getRadius()*3.14<< endl;

Г) cout<< " Area=" << c3.getArea()<< endl;

Д) c2.getArea();

Е) cout<< c3.getArea()<< endl;

8. В каком из конструкторов инициализируется значение свойства radius:

А) circle::circle(){};

Б) circle::circle(double r){ radius=r;};

В) circle::circle(double r, string c){ radius=r; color=c;};

Г) circle::circle(double r, string c){ radius=c; color=r;};

Д) circle::circle(double r, string c){ radius=”r”; color=”c”;};

Е) circle::~circle(double r, string c){ radius=r; color=c;};

9. Как объявить массив из 10 объектов circle:

А) circle A[10];

Б) A circle[10];

В) circle A(10);

Г) int A[10];

Д) circle *A=new circle[10];

Е) circle *A=new circle (10);

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

А) cout<< A[4].getRadius;

Б) cout<< A[4].getRadius();

В) cout<< A.getRadius()[4].;

Г) cout<<A[4].radius;

Д) нет правильного ответа

Ответы

Теоретические вопросы

1)Г 2)ДЕ 3)В 4)АД 5)В 6)Д 7)Б 8)Д 9)А 10)А 11)Б 12) 1Б 2А 3Г 4В 13)А 14)В 15)ВД 16)Д 17)Б 18)Г 19)Д 20)Б

Практические задания

1)Г 2)1Г 2В 3Б 4А 3)АБ 4)АВ 5)БВ 6)А 7)АВ 8)БВ 9)АД 10)Б

Тестовые задания к главе 3

1. Что означает перегрузить операцию:

А) Определить алгоритм ее реализации для заданного типа данных (класса).

Б) Запретить ее выполнение для заданного типа данных (класса).

2. Для того чтобы перегрузить операцию нужно:

А) Создать специальный класс.

Б) Создать оператор-функцию и сделать ее членом-класса.

В) Создать функцию вне класса.

Г) Нет правильного ответа.

3. Какую операцию нельзя перегрузить в языке С++:

А)::

Б).

В)?

Г) sizeof

Д) Все вышеперечисленные.

4. Выберите правильный вариант оператор-функции для перегрузки операции + для объекта «комплексное число», реализуемого классом complex:

А) complex complex::operator +(complex ob2)

Б) complex complex::operator - (complex ob2)

В) complex::operator +(complex ob2)

Г) complex complex:: +(complex ob2)

Д) complex complex:: operator +()

5. Дан фрагмент программного кода:

class F{

int a;

F(int a_){a=a_;}

operator +(F ob 2);//переопределение оператора +

};

Какой из вариантов алгоритмов не соответствует ожиданиям пользователя?

А) F F::operator +(F ob2){

return a + ob 2.a;

}

Б) F F::operator +(F ob2){

return a - ob 2.a;

}

В) F F::operator +(F ob2){

return 0;

}

6. В результате выполнения фрагмента программного кода:

class H{

int a,b;

H(int a_,int b_){a=a_; b=b_;}

friend ostream&operator<<(ostream&stream, H&ob){

}

int main(){

H A(1,2);

cout<<A;

}

на экран выведено

a=1 b=3

Какой из вариантов реализации переопределения оператора вывода использован?

А ) ostream&operator<<(ostream&stream, H ob){

stream<<ob.a<<ob.b;

return stream; 

};

Б ) ostream&operator<<(ostream&stream, H ob){

stream<< " a= " <<ob.a<< " b= " <<ob.b;

return stream; 

};

В ) ostream&operator<<(ostream&stream, H ob){

stream<< " a= " <<ob.a<< " b= " <<ob.b+1;

return stream; 

};

Г) нет правильного ответа.

7. Конструктор копирования срабатывает:

А) При выполнении операции присваивания.

Б) Когда объект передается в качестве параметра в функцию по значению.

В) Когда функция возвращает объект.

Г) Все перечисленное выше.

8. Особенность перегрузки операций ввода вывода в том, что:

А) Для их перегрузки необходимо использовать констурктор копирования.

Б) Их нельзя перегружать для некоторых классов.

В) Для их перегрузки необходимо использовать дружественные функции.

Г) Для них не нужно создавать оператор-функцию.

Ответы

1)А 2)Б 3)Д 4)А 5)БВ 6)В 7)Г 8)В


 

Тестовые задания к главе 4

 

Теоретические вопросы

1. Что означает наследование:

А) Расширение свойств и методов класса за счет родительского класса.

Б) Объединение свойств и методов их обработки.

В) Разный алгоритм поведения под одинаковым названием.

Г) Все перечисленное выше.

2. Что из приведенного не наследуется:

А) Свойства

Б) Методы

В) Конструкторы

Г) Деструкторы

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

Е) Все компоненты наследуются.

3. Когда класс В является производным от класса А, в каком порядке вызываются конструкторы:

А) Сначала конструктор класса А, потом конструктор класса В.

Б) Сначала конструктор класса В, потом конструктор класса А.

В) Только конструктор класса А, так как он базовыйй.

Г) Только конструктор класса В, так как он производный.

4. Выберите правильный вариант записи «класс А наследует класс B»:

А) class A: public B{}

Б) class B: public A{}

В) class B extends A{}

Г) class B class A{}

5. Выберите правильный вариант завершения высказывания «В классе потомке и классе предке»

А) имена свойств обязательно различны, а имена методов могут совпадать.

Б) имена свойств могут совпадать, а имена методов обязательно различны.

В) имена свойств и имена методов обязательно различны.

Г) имена свойств и имена методов могут совпадать.

Д) Все верно.

6. Член класса, имеющий модификатор доступа protected, доступен:

А) Только в пределах данного класса.

Б) В пределах данного класса и производного от него.

В) Вне класса.

Г) Нет правильного ответа.

7.  Выберите правильный вариант определения чисто виртуальной функции:

А) virtual void f=0{}

Б) void virtual f=0{}

В) virtual void f ()=0

Г) нет правильного ответа

8. Абстрактный класс – это

А) класс, который содержит только чисто виртуальные функции

Б) класс, который содержит хотя бы одну чисто виртуальную функцию

В) класс, который не содержит чисто виртуальные функции

Г) класс, который содержит только виртуальные функции, определенные вне класса

9. Что из приведенного не может быть виртуальным методом:

А) конструктор

Б) деструктор

В) дружественная функция

Г) все из перечисленных выше.

10. Как можно реализовать интерфейс в языке С++:

А) Объявив все функции в данном классе как виртуальные.

Б) Определить класс с помощью ключевого слова virtual.

В) Определить класс с помощью ключевого слова interface.

Г) Определить класс с помощью ключевого слова abstract.

 

Практические задания

1. Дан фрагмент программного кода

classA{

int a;

}

class B private A{

int b;

}

Какой вариант конструктора допустим:

А) A(int a_){a=a_;}

B(int a_, int b_):A(int a_){b=b_;}

Б) B(int a_, int b_){b=b_; a=a_;}

В) A(int a_, int b_){b=b_; a=a_;}

 

2. Какие определения методов допустимо использовать:

А) void B::output(){ cout<<"a="<<a<<"b="<<b;}

Б) void A::output(){ cout<<"a="<<a;}

В) void B::output(){ cout<<"b="<<b;}

3. Какой режим доступа при наследовании должен быть установлен, чтобы было возможно выполнение следующих операций

void B::output(){ cout<<"a="<<a<<"b="<<b;}

А) private

Б) protected

В) public

Г) либо protected либо public

Д) режим доступа на это не влияет

4. Дан фрагмент программного кода

class C {

int c;

public:

C(int c_){c=c_;}

void output(){ cout<<"c="<<c;}

};

class D: public C{

int d;

public:

D(int c_, int d_): C(c_){d=d_;}

void output(){ cout<<"d="<<d;}

};

int main(){

D TestObject(1,2);

TestObject.output();

int a;

cin >> a;

}

Что будет выведено на экран?

А) c=1d=2

Б) c=1

В) d=2

Г) нет правильного ответа

5. Какой будет результат компиляции

class C {

int a;

virtual void input(){cout<<a;};

};

class D: protected C{

int b;

input(char separator){cout<<a<<separator<<b};

}

А) Пройдет успешно.

Б) Ошибка: Свойство а недоступно в производном классе

В) Ошибка: неверно определена виртуальная функция

6. Что будет выведено на экран в результате выполнения фрагмента программного кода:

class Base {

public:

   virtual void f() {

               cout<<"Base\n";

   }

};

class Derived:public Base {

public:

void f() {

cout<<"Derived\n";

}

};

main() {

Base *p = new Derived();

p->f();

}

A) Base

Б) Derived

В) Compile error

Г) Нет правильного ответа.

7. Что будет выведено на экран в результате выполнения фрагмента программного кода:

class Base { public: void f () { cout << "Base\n"; } }; class Derived: public Base { public: void f () { cout << "Derived\n"; } }; main () { Derived obj; obj. Base:: f (); }

A) Base

Б) Derived

В) Compile error

Г) Нет правильного ответа.

8. Какое определение допустимо:

А) class C{

int a;

input(){cout<<a;};

};

class D: protected C{

int b;

input(char separator) {cout<<a<<separator<<b};

};

Б) class C{

int a;

protected: void inputC(){cout<<a;};

};

class D: public C{

int b;

void inputD(char separator){

inputC(); cout<<separator<<b;};

};

В) class C{

int a;

void input(){cout<<a;};

};

class D: protected C{

int b;

void input(char separator){ input();

cout<<separator<<b;}

};

Г) class C{

int a;

void inputC(){cout<<a;};

};

class D: protected C{

int b;

void inputD(char separator){ inputC();

cout<<separator<<b};

};

Д) class A{

public:

void input();

};

void A::input(string text) {cout<<text;}

main(){

A B;

B.input();

}

Е) class A{

void input(string text);

};

void A::input(string text){cout<<text;}

main(){

A B;

B.input("OK ");

}

Ж) class A{

public:

void input() {cout<< "OK";};

};

void input(string text){cout<<text;}

main(){

A B;

B.input();

}

З) class A{

public:

void input(string text);

};

void A::input(string text){cout<<text;}

main(){

A B;

B.input();

}

 

Ответы

Теоретические вопросы

1)А 2)ВГД 3)А 4)А 5)А 6)Б 7)В 8)Б 9)Г 10)А


 

Тестовые задания к главе 5

 

1. Дан класс-шаблон

template <class T>

class abc {

   void f();

};

Выбрать правильный вариант определения функции f ().

A) template <class T>

void abc<T>::f() { }

B) template<class T>

void abc::f() { }

C) template<T>

void abc<class T>::f() { }

D) template<T>

void abc<T>::f() { }

2. Исключение это

А) логическая ошибка;

Б) ошибка во время компиляции;

В) ошибка во время выполнения программы;

Г) Все приведенное выше.

3. С помощью какого ключевого слова генерируется исключительная ситуация

А) exception

Б) try

В) throw

Г) catch

4. Каких контейнеров не существует в библиотеке STL:

А) Vector

Б) List

В) Stack

Г) Queue

Д) все существует.

5. Итераторы

А) объекты, предназначенные для хранения других элементов;

Б) указатели на элементы контейнера;

В) выполняют операции над содержимым контейнера;

Г) нет правильного ответа.

Ответы

1) А 2)В 3)В 4)Д 5)Б


 

ЛИТЕРАТУРА

 

1.   Семакин Основы программирования: Учебник для сред. проф. образования / И.Г. Семакин, А.П. Шестаков. Москва: Издательский центр «Академия», 2003.

2.   Ноткин, А. М Объектно-ориентированное программирование на языке С++: Учеб. пособие/А. М. Ноткин – изд-е пермского государственного технического ун-та. – Пермь, 2001.

3.   Шилдт, Г. Самоучитель С++/ Г. Шилдт. – Санкт-Перербург: БХВ-Петербург, 2004.

4.  Chua Hock Chuan. Programming notes. Nanyang Technological University. [Электронный ресурс]. – Режим доступа: http://www.ntu.edu.sg/home/ehchua/programming/.  Дата доступа: 16.10.2016

5.  Отношения классов — от UML к коду. Хабрахабр [Электронный ресурс]. – Режим доступа: https://habrahabr.ru/post/150041/.  Дата доступа: 16.10.2016

6.  С++ Tutorial. Tutorials Point. [Электронный ресурс]. – Режим доступа: https://www.tutorialspoint.com/cplusplus/index.htm.  Дата доступа: 16.10.2016

7.   Лафоре, Р Объектно-ориентированное программирование в С++– Санкт-Перербург: Питер, 2004.

 



Поделиться:


Последнее изменение этой страницы: 2019-05-20; просмотров: 547; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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