Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП Ответы все.docx
Скачиваний:
23
Добавлен:
01.03.2016
Размер:
71.65 Кб
Скачать

28.Виртуальные функция

Методы для которых должно реализовываться позднее связывание называются виртуальные и описываются словом virtual.

Виртуальная функция — это функция, объявленная с ключевым словом virtual в базовом классе и переопределенная в одном или в нескольких производных классах. Виртуальные функции являются особыми функциями, потому что при вызове объекта производ­ного класса с помощью указателя или ссылки на него С++ определяет во время исполнения про­граммы, какую функцию вызвать, основываясь на типе объекта. Для разных объектов вызываются разные версии одной и той же виртуальной функции. Класс, содержащий одну или более вир­туальных функций, называется полиморфным классом (polymorphic class).

Виртуальная функция объявляется в базовом классе с использованием ключевого слова virtual. Когда же она переопределяется в производном классе, повторять ключевое слово virtual нет не­обходимости, хотя и в случае его повторного использования ошибки не возникнет.

29. Дружественная функция - это функция, которая не являясь частью класса имеет доступ ко всем элементам из дружественного себе класса.

Дружественная функция объявляется внутри класса с модификатором friend

Казалось бы легкое и понятное определение. Объявил функцию внутри класса, дописал перед ней модификатор friend и используй как обычную и независимую от класса функцию вне класса. Если вы заинтересованы в этой теме, то попробуйте применить такую теорию на практике. Думаю подавляющее большинство попробовавших столкнутся с проблемами. class Foo

{

Void friend Bar(Foo & foo);

private:

Int data;

};

Void Bar(Foo & foo)

{

    foo.data = 1;

}

30. Дружественные классы.

Некоторым классам может понадобиться доступ к закрытым данным друг друга

Например, классу «дерево» может понадобиться доступ к закрытым полям его узлов

В этом случае необходимо объявить дружественный класс внутри определения класса

Дружественная связь между классами является самой сильной

Реализации классов оказываются связанными, что противоречит принципу инкапсуляции

Не используйте дружественные классы до тех пор, пока их использование не окажется единственным способом решения задачи

class Bar;

class Foo

{

friend class Bar;

private:

    int data;

};

class Bar

{

    void Do(Foo & foo)

    {

        foo.data = 1;

    }

};

31. Работа динамической памятью. Особенности работы конструкторов и деструкторов.

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

Конструктор включается в состав класса в разделе public:

class Printer

{…

public: Printer(); //Конструктор…};

Деструктор:

Printer :: ~Printer()

{//Освобождение динамической памят

delete[] model;

//Присваивание указателю значения пустого

//указателя, обязательно в Visual C++ 6.0

model = NULL;}

Тогда программа, выполняющая все этапы работы с объектом, будет выглядеть так:

int main(void)

{Printer printer("HP5P",1999); //Создание объекта

printer.show();

return 0;}

Явный вызов деструктора не требуется, так как его вызов будет выполнен автоматически в точке программы, где объект должен быть разрушен в соответствии с его временем жизни.