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

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

Константные методы отличаются тем, что не изменяют значений полей своего класса.

Пример:

class aClass

{

private:

int alpha;

public:

void nonFunc() //неконстантный метод

{ alpha = 99; } //корректно

void conFunc()const //константный метод

{ alpha = 99; } //ошибка: нельзя изменить значение поля

};

Для того, чтобы сделать функцию константной, необходимо указать ключевое слово const после прототипа функции, но до начала тела функции. Если объявление и определение функции разделены, то модификатор const необходимо указывать дважды – как при объявлении функции, так и при ее определении.

Пусть класс

class A

{ public:

const int b;

A(int val): b(val){};

}

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

Вот код для изменения константы, НО ГЛОБАЛЬНЫЕ константы таким образом НЕ ТРОГАТЬ

#include <iostream>

using namespace std;

class A{

const int val;

public:

A(): val(1){};

void check()

{

if (val == 1)

cout << "Old value" << endl;

else

cout << "New value" << endl;

}

void change()

{

int& z=const_cast<int&>(val);

z=2;

}

};

int main()

{

A a;

a.check();

a.change();

a.check();

}

91. Опишите синтаксис определения метода класса вне описания класса.

class <название класса> { … <тип результата1> <имя функции1> (<типы параметров1 (через запятую)>); … friend <тип результата2> <имя функции2> (<типы параметров2 (через запятую)>); … } … <тип результата1> <название класса>::<имя функции1> (<типы параметров1 (через запятую)>) { <тело функции1> } … <тип результата2> <имя функции2> (<типы параметров2 (через запятую)>) { <тело функции2> }

пример:

class A

{ public:

int calc(int,int); }

int A:: calc(int a, int b)

{ return a + b; }

Символ :: - это символ является знаком операции глобального доступа.

92. Опишите синтаксис конструктора.

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

class <название класса> { … <название класса> ()[:<…>]{<.>}; // конструктор по умолчанию <название класса> (<параметры (через запятую) + параметры по умолчанию>)[:<…>]{<.>} //синтаксис конструктора с параметрами <название класса> (const <название класса> &<название переменной>)[:<…>]{<.>} //конструктор копирования ~<название класса> (){<.>} //деструктор … }

Об особенностях… В синтаксисе выше используется краткое обозначение [:<…>]{<…>}, которое можно рассматривать как:

<.> - тело конструктора / деструктора.

[:<…>] – эта часть может отсутствовать, если она есть, то её синтаксис : <имя переменной 1> (<значение переменной 1>), <имя переменной 2> (<значение переменной 2>), <…>

В данной части происходит инициализация переменных.

class A

{ public:

A(список параметров);

}

A:: A(список параметров) { }

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

93. Укажите способы доступа к полям и методам класса.

. - позволяет ссылке на объект получить доступ к полю структуры (класса).

Пример: struct strct{ int info; }; void main(){ strct x; x.info=7; }

-> - позволяет ссылке на объект получить доступ к полю структуры (класса). struct strct{ int info; }; void main(){ strct *x=new strct; x->info=7; }

94. Зачем нужны методы с модификатором const? и как они используются.

Когда метод не изменяет поля объекта, для которого он вызван, желательно в конце написать const

void func () const { …}

пример из перегрузки операторов:

inline Chislo Chislo::operator + (const Chislo & c) const

{

Chislo m;

m.mi = mi + c.mi;

m.ma = ma + c.ma;

return m;}

95. Как определить константный объект? Какие методы доступа применимы к нему?

Если объект класса объявлен с модификатором const, он становится недоступным для изменения. Это означает, что для такого объекта можно вызвать только константные методы, поскольку только они гарантируют, что объект не будет изменен.

int main()

{ const MyClass obj;

… }

96. Какой параметр скрыто передается методу класса? Опишите использование ключевого слова this.

Функции-члены класса (за исключением статических) получают в дополнение к списку параметров еще и неявный указатель this - адрес "своего" объекта, того, с которым они вызваны и поля которого они должны обрабатывать.

Ключевое слово "this" представляет собой указатель на текущий объект класса. Методы класса могут использовать ключевое слово this чтобы получить указатель на объект для которого вызван данный метод. Указатель this представляет собой постоянную величину, мы не можем изменять его значение в своей программе.

class my

{ int a;

public:

my(могут быть параметры); //конструктор- без типа, совпадает с именем класса

void b() { this->a=0; }

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]