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

2. Ссылки, указатели и переменные – отличия при использовании

Передача параметров по ссылке в Си++

В Си++ можно передавать параметры по ссылкам. Пример из предыдущего абзаца теперь выглядит так:

void foo (int& x)

{

x = 17;

}

int main ()

{

int z = 5;

foo (z); // теперь z=17

}

Однако, в таком варианте использования ссылок программисту приходится быть осторожным при передаче значений в функцию стороннего разработчика, если не планируется изменение передаваемой переменной: только функции с прототипом

void foo (const int& x);

гарантируют неизменность передаваемого значения.

int const *foo

Указатель на const int. Значение указателя изменить можно (так, чтобы он указывал на что-нибудь другое), а вот значение переменной, на которую он указывает, менять нельзя.

3. Классы и структуры в С++. Доступ по умолчанию.

В C++ структуры формально отличаются от классов лишь тем, что по умолчанию члены и базовые классы у структуры публичные, а у класса — собственные.

Классы в языке C++

Класс в языке C++ создаётся следующим образом:

class MyClass: public ParentClass // ParentClass — класс-предок, если таковой имеется

{

public:

// элементы в этой секции доступны из любой части программы

MyClass(); // конструктор

~MyClass(); // деструктор

protected:

// элементы в этой секции доступны из класса и его потомков

private:

// элементы в этой секции доступны только из класса; это область доступа по умолчанию

};

После своего создания класс считается полноценным типом данных и, следовательно экземпляры класса создаются следующим образом:

MyClass myinstance;

Обращение к членам класса:

myinstance.classmember

Уничтожается экземпляр класса, как и любая переменная, только в случае, если функция, в которой он был создан, завершила работу или если была принудительно освобождена динамическая память, выделенная под класс.

4. Зачем нужны описатели public и private?

Спецификаторы доступа public и private управляют видимостью элементов класса. Элементы, описанные после служебного слова private, видимы только внутри класса. Этот вид доступа принят в классе по умолчанию. Интерфейс кламма описывается после спецификатора public. Действаие любого спецификатора распространяется до следующего спецификатора или до конца класса. Можно задавать несколько секций public и private,порядок их следования не имеет значения.

5. Перегрузка операций. Пример.

C++ позволяет переопределить действие большинства операций так, чтобы они при использовании с объектами конкретного класса они выполняли заданные функции. Это дает возможность использовать собственные типы данных так же, как стандартные. Обозначения собственных операций вводить нельзя. Можно перегружать любые операции, существующие в C++, за исключением:

. .* ?: :: # ## sizeof

перегрузка операций осществляется с помощью методов специального вида(функций-операций) и подчиняется следующим правилам:

а)при перегрузке операций сохраняются количество аргументов, приоритеты операций и правила ассоциации (справа налево и слева направо), используемые в стандартных типах данных

б)для стандартных типов данных переопределять операции нельзя

в)функции-операции не могут иметь аргументов по умолчанию

г)функции-операции наследуются(за исключением =)

д)функции-операции не могут определяться как static

Функция-операция определяется либо как метод класса, либо дружественная функция, либо обычной функцией

Пример(при определении внутри класса):

class monstr{

...

bool operator > (const monstr &M){

if(health>M.health) return true;

return false;

}

};

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