Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
138
Добавлен:
19.04.2015
Размер:
74.75 Кб
Скачать

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

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

  1. все они имеют различные имена

  2. все они имеют различные списки параметров

  3. по крайней мере один из них является конструктором по умолчанию

  4. по крайней мере один из них инициализирует все поля

  1. Какое из следующих высказываний справедливо?

  1. свойство должно иметь то же имя, что и поле

  2. свойство всегда должно быть открытым

  3. свойство обязательно определяет поведение двух операций get и set

  1. Перегрузка методов означает:

  1. они имеют разные имена

  2. они имеют одинаковые имена, но относятся к разным классам иерархии

  3. они имеют одинаковые имена и одинаковые списки параметров

  4. они имеют одинаковые имена и различные списки параметров

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

  1. может представить переопределенный вариант этого метода с точно же такими параметрами

  2. должен представить переопределенный вариант этого метода с точно же такими параметрами

  3. может представить переопределенный вариант этого метода с теми же или другими параметрами

  4. должен представить переопределенный вариант этого метода с теми же или другими параметрами

5. Пусть класс classA имеет два поля (типа int) field1 и field2 и конструктор, который инициализирует эти поля. Класс classB унаследован он classA. Он имеет собственное поле field3. Как надо определить конструктор класса classB, чтобы он инициализировал все три поля:

a. classB (int c, int a, int b): base(a, b)

{

field3 = c;

}

b. classB (int c, int a, int b)

{

classA(a, b);

field3 = c;

}

c.classB (int c, int a, int b)

{

base(a, b);

field3 = c;

}

d. classB (int c, int a, int b)

{

super(a, b);

field3 = c;

}

6. Если класс classA определен следующим образом

class classA

{

public int field1;

public int field2;

public classA(int a, int b)

{

field1 = a;

field2 = b;

}

public classA(): this(0, 0)

{

}

public classA(classA obj): this(obj.field1, obj.field2)

{

}

}

То каков будет результат работы следующего фрагмента

classA ob1 = new classA();

classA ob2 = new classA(10, 10);

classA ob3 = new classA(ob2);

Console.WriteLine(ob1.field1 + " " + ob1.field2);

Console.WriteLine(ob2.field1 + " " + ob2.field2);

Console.WriteLine(ob3.field1 + " " + ob3.field2);

    1. никакой, т.к. произойдет ошибка на этапе компиляции

    1. 0 0

0 0

0 0

c. 0 0

10 10

10 10

d. 0 0

10 10

0 0

7. Какой из следующих программных фрагментов правильный

a.

using System;

using System.Collections.Generic;

using System.Text;

namespace pr45

{

class classA

{

int field;

public int PropField{

get

{return field;

}

set {

field=value;}

}

}

class Program

{

static void Main(string[] args)

{

classA ob = new classA();

ob.PropField=10;

Console.WriteLine(ob.PropField);

}

}

}

b.

using System;

using System.Collections.Generic;

using System.Text;

namespace pr45

{

class classA

{

int field;

public int PropField{

get

{return field;

}

set (int value){

field=value;}

}

}

class Program

{

static void Main(string[] args)

{

classA ob = new classA();

ob.PropField=10;

Console.WriteLine(ob.PropField);

}

}

}

c.

using System;

using System.Collections.Generic;

using System.Text;

namespace pr45

{

class classA

{

int field;

public int PropField{

get

{return field;

}

set {

field=value;}

}

}

class Program

{

static void Main(string[] args)

{

classA ob = new classA();

ob.field=10;

Console.WriteLine(ob.field);

}

}

}

8. Класс classA задан следующим образом:

class classA

{

public int this[int ind]

{

get

{if (ind>=0&&ind<9) return fact(ind);

else return -1;

}

}

int fact(int p)

{

int res = 1;

for (int i = 1; i <= p; i++)

res *= i;

return res;

}

}

Если затем создать экземпляр класса

classA ob = new classA();

то чему будут равны значения ob[3] и ob[9]

  1. ob[3]=6, ob[9] не существует, поэтому произойдет аварийное прерывание

  2. ob[3]=6, ob[9]=-1

  3. произойдет ошибка компиляции, т.к. нет базового массива

  4. произойдет ошибка компиляции, т.к. нет set-аксессора

9. Выберите верные высказывания:

a. индексатор можно передавать в метод как out-параметр

b. индексатор можно объявлять с использованием ключевого слова static

с. можно создавать индексаторы для многомерных массивов

d. индексатор нельзя перегружать

e. индексатор может быть создан с поддержкой только get или только set блока

10. Пусть определены два класса

class classA

{ int field1;

int field2;

}

class classB:classA

{

public int field3;

public classB(int a, int b)

{

field1 = a;

field2 = b;

field3 = field1 + field2;

}

public void Show()

{

Console.WriteLine(field3);

}

}

}

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

classB ob1 = new classB(2,3);

ob1.Show();

  1. 5

  2. Ошибка на этапе компиляции из-за того, что не создан экземпляр класса classA

  3. Ошибка на этапе компиляции из-за того, что закрытые члены базового класса field1 и field2 не доступны в производном классе

Правильные ответы

№ задания

1

2

3

4

5

6

7

8

9

10

ответ

b

b

d

a

a

c

a

b

c, e

c

5