Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Стандартные конструкторы

Reader._AddRef | Представление интерфейса в памяти | Применение интерфейса для доступа к объекту динамически-подключаемой библиотеки | Понятие компонента | Понятие визуального программирования | Microsoft Visual Studio | Желательно встроить средства расширения в язык. | Всегда есть потеря на jmp; | Component Pascal | Предкомпилированные заголовки |


Читайте также:
  1. Конструкторы и деструкторы
  2. Конструкторы и деструкторы
  3. Конструкторы, деструктор и перегрузка опрации присваивания в производном классе.
  4. Наиболее употребительные нестандартные глаголы
  5. Нестандартные технологии обработки металла
  6. Первый взгляд на Лорда Мёртвых Лорд Мёртвых (англ. Crypt Lord) располагается в Меню рас -> Стандартные герои -> 8. Лорд Мёртвых.
  7. Перегруженные конструкторы

 

Если программист не определяет в классе конструкторы, то компилятор создает автоматически два конструктора:

ƒ конструктор без параметров

ƒ конструктор копирования

 

class TTextReader

{

public:

TTextReader(); // конструктор без параметров

TTextReader(const TTextReader &R); // конструктор копирования

}

 

Если программист определил хотя бы один конструктор в класс – компилятор не создаст никаких стандартных конструкторов.

 

Конструктор без параметров создается для того, чтобы можно было написать:

TTextReader R;

 

Конструктор копирования нужен для следующей записи:

TTextReader R1 = R2; // означает TTextReader.R1(R2);

 

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

Следует отметить, что запись:

TTextReader R1 = R2;

 

и два оператора:

TTextReader R1;

R1 = R2;

 

имеют схожий синтаксис с вызовом конструктора копирования, но разную семантику: в первом случае объект создается конструктором копирования, во втором – конструктором без параметров, а затем с помощью оператора‘=’ выполняется присваивание одного объекта другому (данный вариант требует перегрузки оператора‘=’ для класса TTextReader).

 

Работа стандартного конструктора копирования, создаваемого компилятором, заключается в том, чтобы выполнить полное копирование памяти с помощью функции memcpy.

 

Вы можете использовать конструктор более чем только для инициализации нового объекта. Например, наша программа содержит такой оператор в функции main():

 

stockl = Stock (" Nifty Foods ", 10, 50.0);

 

Объект stockl уже существует. Поэтому вместо инициализации stockl данный оператор присваивает ему новые значения. Это делается за счет создания конструктором нового временного объекта и последующего копирования его содержимого в stockl. Затем программа уничтожает временный объект, вызывая его деструктор. Некоторые компиляторы могут удалять временный объект позже, откладывая вызов деструктора.

 

 

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

 

Предположим, что вы создали нечто наподобие:

 

 

class Dwelling

{

public:

virtual void showperks (int а) const;

};

class Hovel: publiv Dwelling

{

public:

virtual void showperks () const;

};

 

 

Hovel trurnp;

trurnp.showperks(); // верно

trurnp.s howperks(S); // неверно

 

Если вы переопределяете унаследованный метод, необходимо убедиться в точном совпадении

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

 

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

 


Дата добавления: 2015-11-16; просмотров: 64 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Понятие пространства имен| Порядок конструирования и разрушения объектов

mybiblioteka.su - 2015-2024 год. (0.006 сек.)