c_sharp_vse_(14.12.13) / kudrina_e_v_ogneva_m_v_portenko_m_s_programmirovanie_na_yazy / index.files / test / тест_классы
.docТест «Классы и объекты»
-
Для одного класса может быть определено несколько конструкторов при условии что:
-
все они имеют различные имена
-
все они имеют различные списки параметров
-
по крайней мере один из них является конструктором по умолчанию
-
по крайней мере один из них инициализирует все поля
-
Какое из следующих высказываний справедливо?
-
свойство должно иметь то же имя, что и поле
-
свойство всегда должно быть открытым
-
свойство обязательно определяет поведение двух операций get и set
-
Перегрузка методов означает:
-
они имеют разные имена
-
они имеют одинаковые имена, но относятся к разным классам иерархии
-
они имеют одинаковые имена и одинаковые списки параметров
-
они имеют одинаковые имена и различные списки параметров
-
Если метод объявлен как виртуальный, тогда любой произвольный класс:
-
может представить переопределенный вариант этого метода с точно же такими параметрами
-
должен представить переопределенный вариант этого метода с точно же такими параметрами
-
может представить переопределенный вариант этого метода с теми же или другими параметрами
-
должен представить переопределенный вариант этого метода с теми же или другими параметрами
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);
-
никакой, т.к. произойдет ошибка на этапе компиляции
-
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]
-
ob[3]=6, ob[9] не существует, поэтому произойдет аварийное прерывание
-
ob[3]=6, ob[9]=-1
-
произойдет ошибка компиляции, т.к. нет базового массива
-
произойдет ошибка компиляции, т.к. нет 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();
-
5
-
Ошибка на этапе компиляции из-за того, что не создан экземпляр класса classA
-
Ошибка на этапе компиляции из-за того, что закрытые члены базового класса field1 и field2 не доступны в производном классе
Правильные ответы
№ задания |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
ответ |
b |
b |
d |
a |
a |
c |
a |
b |
c, e |
c |