Суть тестирования по принципу «белого ящика».
2 семестр:
1. Общие принципы организации ввода-вывода данных в С++. Ввод-вывод в стандартные потоки. Форматирование.
2. Файловый ввод-вывод. Работа с текстовыми файлами. Копирование текстовых файлов. Поиск в текстовом файле заданной подстроки. Подсчет количества вхождений слова в текст, расположенный в файле.
3. Последовательный и прямой доступы к файлу. Структуры и бинарные файлы. Организация простейшей базы данных.
4.*Строковые потоки.
5. Определение структуры. Определение и инициализация структурных переменных. Вложенные структуры. Массивы структур. Структура в качестве аргумента функции. Можно ли структуру возвратить из функции, присвоить одну структуру другой?
6. Объединение как совокупность данных и пользовательский тип, отличия от структуры.
7. Поля битов в структурах. Примеры использования объединений и полей битов для доступа к отдельным байтам и битам внутреннего представления значения переменной.
8. Абстракция, инкапсуляция, наследование и полиморфизм как основополагающие принципы ООП. Примеры абстрактных типов данных. Виды операций клиента над объектом.
9.Укажите верные утверждения:
1.метод является подвидом функции
2.метод является подвидом класса
3.конструктор является подвидом метода
4.самолет является подвидом транспортного средства
5.машина является подвидом грузовика
6.круг является подвидом геометрической фигуры
7.квадрат является подвидом треугольника
8.автомобиль является подвидом самолета
9.читатель является подвидом библиотеки
10.Какие конструкции С++ позволяют образовывать новые типы данных? Класс как расширение понятия структуры. Чем класс отличается от структуры? Что определяет класс? Чем класс отличается от объекта?
11.Сколько места в памяти занимает объект класса? Как это узнать? Одинаков ли размер класса и аналогичной структуры? Что такое выравнивание и от чего оно зависит? Влияет ли выравнивание на размер класса? Влияют ли методы на размер объекта? Влияет ли наличие целочисленных констант-полей на размер объекта?
12.Какие ключевые слова в С++ обозначают класс? Синтаксис определения класса. Какой тип могут иметь поля класса? Разрешается ли объявлять указатель на объект? А указатель на класс?
13.Метод класса.Встроенное и внешнее определение методов и их отличие.Можно ли в методах присваивать параметрам значения по умолчанию? Вызов метода.
14.Доступность компонентов класса. Способы доступа к полям и методам класса. Для чего используются ключевые слова public и private? Можно ли использовать ключевые слова public и private в структуре? Существуют ли ограничения на использование public и private в классе и в структуре? Обязательно ли делать поля класса приватными? Может ли метод быть приватный?
15.Определение и инициализация объектов. Определение, назначение и синтаксис конструктора и деструктора. Отличия конструктора от метода. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Допускается ли перегрузка деструкторов?
16.Какие конструкции С++ разрешается использовать в списке инициализации в качестве инициализирующих выражений? В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?
17.Конструктор по умолчанию (без параметров), конструктор с параметрами (инициализации), конструктор копирования. Какие виды конструкторов создаются по умолчанию? Можно ли явно вызвать конструктор и деструктор?
18.Что такое глубокое копирование и когда в нем возникает необходимость? Какое копирование осуществляет стандартный конструктор копирования?
19.Объяснить работу конструкторов:
struct s1{
int i;
float x;
s1(int j, float y){i = j; x = y;}
};
struct s2{
int i;
float x;
s2 (const s1& a){i =a.i; x=a.x;}
};
void main(){
s1 obj1 (1, 3.7);
s2 obj2 (obj1);
}
20.Можно ли построить класс без конструктора? Как в этом случае определить объекты класса? Может ли конструктор быть приватным, и какие последствия это влечет?
21.Найти ошибки, если они есть:
class H {
int i;
public:
int H( ) { };
};
int main ( ) {
H ob;
ob.i = 10 ;
}
22.Укажите результат:
classB {
public:
B(charc) { cout << c;}
};
class D {
public:
B bB, bA, bC;
D() : bA(‘a’), bB(‘b’), bC(‘c’) { }
};
int main() {
D d;
}
23.Какой вид конструктора фактически является конструктором преобразования типов? Как запретить неявное преобразование типа, выполняемое конструктором инициализации?
24.Укажите верные высказывания, использующие конструктор копирования классаProba:
a.Proba a1;
Proba a2(a1);
b.Proba a2;
Proba a3=a2;
c.Proba a2;
Proba a3;
a3=a2;
d.Proba a1;
Proba a2;
a2=a1;
e.void fun(Proba c);
Proba a;
fun(a);
f.Proba fun();
Proba a;
a=fun();
g.void fun(Proba& c);
Proba a;
fun(a);
h.void fun(Proba * c);
Proba a;
fun(&a);
i.Proba& fun();
Proba a;
a=fun();
25.Чем отличается копирование от присваивания? Укажите верные высказывания, использующие оператор присваивания после конструктора копирования объектов классаProba:
a.Proba a1;
Proba a2(a1);
b.Proba a2;
Proba a3=a2;
c.Proba a2;
Proba a3;
a3=a2;
d.Proba a1;
Proba a2;
a2=a1;
e.void fun(Proba c);
Proba a;
fun(a);
f.Proba fun();
Proba a;
a=fun();
g.void fun(Proba& c);
Proba a;
fun(a);
h.void fun(Proba * c);
Proba a;
fun(&a);
i.Proba& fun();
Proba a;
a=fun();
26.Укажите верные высказывания, использующие деструктор классаProba:
a.void fun(Proba c);
Proba a;
fun(a);
b.Proba fun();
Proba a;
a=fun();
c.void fun(Proba& c);
Proba a;
fun(a);
d.void fun(Proba* c);
Proba a;
fun(&a);
e.Proba& fun();
Proba a;
a=fun();
27.Объясните случаи неявного вызова конструкторов:
class A{
int x;
public:
A(){};
A(int p):x(p){};
A(A const& a){x = a.x;}
};
A f(A a){
return 3;
}
A g(A a){
return a;
}
int main(){
A a;
a = 1;
f(2);
A d = g(a);
A c(a);
A b=a;
}
28.Пользуясь определением класса Account:
class Account {
public:
Account();
explicit Account( const char*, double=0.0 );
// ...
};
объясните, что происходит в результате следующих определений:
(a) Account acct;
(b) Account acct2 = acct;
(c) Account acct3 = "Rena Stern ";
(d) Account acct4( "Anna Engel ", 400.00 );
(e) Account acct5 = Account( acct3 );
29.Что обозначается ключевым словом this? Что означает выражение *this? В каких случаях оно используется? Какой параметр скрыто передается методам класса и каким методам?
30.Укажите возможные способы снятия неоднозначности в теле метода класса между одинаковыми именами формального параметра и компонента класса.
31.Константные поля и константные методы класса. Как объявить константу в классе? Как инициализировать поля класса, определенные как константные? Можно ли объявить вещественную константу? Зачем нужны константные методы и как они используются? Чем отличается определение константного метода от обычного?
32.Как определить константный объект? Какие методы доступа применимы к нему? Может ли константный метод вызываться для объектов-переменных, а обычный — для объектов-констант?
33.Укажите верные способы задания полей–массивов в классе:
const unsigned N=10;
class Arrays
{ int m0[10];
static const unsigned int k = 10;
enum { n = 10 };
int m1[k];
int m2[n];
const int kk;
int m3[kk];
int m4[N];
public:
Arrays():kk(10)
{ for (int i = 0; i < k; ++i)
m0[i]=m1[i]=m2[i]=m3[i]=m4[i]=0; //???
}
};
34. *Как изменить поля класса, определенные как константные?
35.*Объяснить результат выполнения операторов:
class INTREF {
int& ref;
public:
INTREF(int& v) : ref(v) {};
};
……
int i=2,j=3;
INTREF a(i), b(j);
a=b;
36.Статические компоненты класса. Как они определяются? Для чего нужны статические поля в классе? Подсчет количества объектов класса с идентификацией объекта.
37.Найти ошибки, если они есть:
class C {
public:
C (int y=10) {data=y;}
int get ( ) const {return data++;}
static int count( ) {cout<<data<<endl; return count;}
private:
int data;
static int count;
};
38. *Какие средства языка С++ позволяют выполнить одновременно: объявить массив в классе в единственном экземпляре, сделать его константным, проинициализировать при объявлении и, тем не менее, локализовать его в классе.
39.Найти ошибки, если они есть:
class C{
public:
int C(int);
void ~C(int);
private:
int h=0;
int m=0;
};
40.Класс «точка». Класс «прямоугольник».
41.Класс для измерения интервала времени между созданием и удалением объекта.
42.Класс-объединение для побайтного вывода значения типа double в двоичном представлении.
43.Можно ли объявлять массив объектов? А массив классов? Можно ли в С++ объявлять массив объектов следующим образом: classA objects[10]?
44.Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам поля-массива начальные значения?
45.Как называется использование объекта одного класса в качестве поля другого класса? Что такое композиция? Сравните композицию по ссылке с композицией по значению, приведите примеры их использования.
46.*Вложенные классы . Примеры. Может ли объемлющий класс иметь неограниченный доступ к элементам вложенного класса? А вложенный класс — к элементам объемлющего?
47.Что происходит при вызове classA *ptrA = new classA?
48.Передача объектов в функцию. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?
49.Перегрузка операций. Все ли операции могут быть перегружены? Можно ли перегрузить операции для базовых стандартных типов данных?
50.Можно ли определить новую операцию? Можно ли при перегрузке изменить приоритет операции? *Почему нельзя перегружать операции :: . .* ?
51.Укажите различные способы перегрузки операторов. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса? Какие операции разрешается перегружать только как методы класса?
52.Можно ли перегрузить конструктор и деструктор?
53.Перегрузка операции присваивания. Пример. Какой результат должны возвращать перегруженные операции присваивания?
54.Укажите особенности перегрузки ++ --. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?
55.Объясните работу операторов и укажите ошибки, если они есть:
TString TString::operator++()
{for(int i = 0; i < this->Length(); i++)
{ for (int j = 0; j < 59; j++) if (s[i] == lower[j]) s[i]=upper[j]; }
return *this;
}