Step 10 (S-11543)

From Stepik Wiki
Revision as of 08:41, 21 March 2017 by Admin (Talk | contribs) (Create page for step id=11543)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/564/step/10

<img width="50%" src="https://ucarecdn.com/19afaa8e-145a-486e-93b0-9aef788cebd9/">

[00:00 - 00:15] аналогично шаблона функциям можно определять шаблонным методом давайте посмотрим на следующий пример в данном примере мы дополним шаблоны класс массива при помощи такого шаблонного конструктор


[00:15 - 00:32] такой шаблон оператора надо сразу же отметить что несмотря на то что данный конструктор похож на конструктор копирования а данной оператор перестань я и назвал оператором присваивания ты под надо отметить что те 4 важно метода о котором говорит на 4 недели а именно


[00:32 - 00:50] конструктор по умолчанию конструктор копирования оператор присваивания и деструктор вот это 4 метода который генерирует с компилятором это 4 метода не могут быть шаблонными еще метод который не может быть шаблон это виртуальный метод не может быть шагом


[00:50 - 01:06] поэтому несмотря на то что данные методы конструктор и оператор присваивания выглядит как будто это конструктор копирования оператор присваивания и даже можно аргументировать что если мы подставим


[01:06 - 01:22] вместо значение шаблонного параметра подставим значение соответствующее type то данный конструктор будет конструктором копирования но так по стандарту это запрещено то вдобавок к этому конструктору этому оператору почтовой ногой


[01:22 - 01:39] определить еще не обычный конструктор копирования и обычно оператор присваивания которых будет типу аргумента соответственно просто и которые не будут шаблоны то есть несмотря на то что тип сам проявляет шаблоном


[01:39 - 01:56] все эти 4 то да то есть конструктор копирования оператор присваивания деструктор и которых они не могут быть он зачем нужен такой конструктор который едет за пределами того конструктор позволит сделать следующее например


[01:56 - 02:13] мы определим некоторый массив целых чисел как ты его запомним после этого можно будет скопировать массив другого типа в том случае если есть приведение от


[02:13 - 02:30] значение типа int к этому типу например можно будет определить массив double и сконструировать его от массива типа тогда при копировании вот в этой строчке


[02:30 - 02:47] произойдет привидение значение типа int у нас очень устала значением типа да логично будет работать и оператор присваивания ну так вот описание


<img width="50%" src="https://ucarecdn.com/e7f8eac9-c2ee-4fe5-9883-42d9fc141445/">

[02:47 - 03:04] позволит сделать например обратно с можно бы после такой конвертации присвоить массиву а массив б и внутри этого оператора предстанем пред обратное преобразование от значения типа double грачевым типа нет


<img width="50%" src="https://ucarecdn.com/d9df3f4f-05bd-4578-b361-1402f32b5331/">

<img width="50%" src="https://ucarecdn.com/50a0a8cc-2db4-4a31-ae06-e6f529d40a11/">

[03:04 - 03:19] важно отметить что так же как и другие методы класса шаблоны методы можно определять снаружи класс обычно затруднения вызывает когда мы снаружи класса определяем


[03:19 - 03:34] шаблонный метод шаблонного класса от в данном случае оператор присваивания шаблон оператор присваивания которой мы здесь объявили можно определить с наружи класса так отношениям класс является шаблоном


<img width="50%" src="https://ucarecdn.com/38ae3448-9b98-4769-a9ab-14faacbd1ad5/">

[03:34 - 03:53] то оператор присваивания будет шаблоны методом шаблонного класса для того чтобы его определить снаружи казался ему нужно задать 2 шаблонным заголовкам 1 шаблоны заголовок 1 он будет соответствовать шаблонному заголовку снова класса


<img width="50%" src="https://ucarecdn.com/de61f366-f88a-4c40-b8c8-4d87e3bc0fd8/">

<img width="50%" src="https://ucarecdn.com/67d9ea0b-cfc0-4dc4-bdf9-93e7e76de9b2/">

[03:53 - 04:11] соответствует типу из параметров класс эры 2 шаблоны заголовок будет соответствовать шаблону заголовку непосредственно при этом когда мы будем указывать


<img width="50%" src="https://ucarecdn.com/5b433b55-334d-4844-bdba-d579c1d79a58/">

[04:11 - 04:29] тип до которого мы переопределяем данный метод мы должны будем указывать полное имя типа то есть мы должны будем указывать re с подставленным шаблоны параметром type 10 ты здесь указывается


<img width="50%" src="https://ucarecdn.com/34af1743-4cde-41bb-8878-e07fcc9978d5/">

<img width="50%" src="https://ucarecdn.com/4499e7d1-7ecf-4dc0-9880-087abb142730/">

[04:29 - 04:44] конкретный тип уже то есть внутри класса мы можем позволить себе указывать просто эры но при реализации мы должны уже указывать полное название типа


<img width="50%" src="https://ucarecdn.com/4dbf602c-f745-481d-b9cf-299185d825c8/">