Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога экзамен.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
272.38 Кб
Скачать

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;

}

TString TString::operator--()

{for(int i = 0; i < this->Length(); i++)

{ for (int j = 0; j < 59; j++) if (s[i] == upper[j]) s[i]=lower[j]; }

return *this;

}

 

TString t ("МамамылаМилу"); cout << t << endl;

++t; cout << t << endl;

--t; cout << t << endl;

TString b = "abCDefGH"; cout << b << endl;

++b; cout << b << endl;

--b; cout << b << endl;

56.    Какие операции не рекомендуется перегружать как методы класса? Почему? Перегрузка операции сложения. Пример.

 

57.    Перегрузка операции индексирования. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?

 

58.    Указать верные объявления перегруженных операторов присваивания:

Proba& operator = (Proba& a);

Proba operator = (Proba& a);

 

59.    Перегрузка операций ввода/вывода.

 

60.    *Объясните значение для перегрузки операторов (и приведите примеры использования) возможности возврата из функции ссылки.

 

61.    *Укажите ошибки (если они есть) и прокомментируйте последовательность операторов:

double *p = (double*)malloc(sizeof(double));

double& ref = *p;

ref = 1.0;

free(p);

ref = 1.5;

62.    Что происходит в следующих выражениях, содержащих new и delete?

class Exercise {

public:

Exercise();

~Exercise();

void *operator new[]( size_t );

void operator delete[]( void * );

};

Exercise *ps = new Exercise[20];

delete[] ps;

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

 

63.    Выполнение каких инструкций предполагает выделение памяти с помощью оператора new():

Point *ptrP = new Point(10, 20);

 

64.    Объясните, какие из приведенных инициализаций ошибочны:

class iStack {

public:

iStack( int capacity )

: _stack( capacity ), _top( 0 ) {}

private:

int _top;

vector< int> _stack;

};

 

(a) iStack *ps = new iStack(20);

(b) iStack *ps2 = new const iStack(15);

(c) iStack *ps3 = new iStack[ 100 ];

 

65.    Определить класс-вектор с перегрузкой операторов ввода/вывода, присваивания, сложения.

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

class Sample

{

public:

Sample()

{

cout << "Constructor" << endl;

}