C Класове за развитие и наследяване

Всичко, което научихте в предишните уроци, разбира се вече беше част от езика за програмиране C ++. Независимо от това, разработването на програма C ++ обикновено изглежда различно от това, което сте виждали досега в примери.

развитие

Досега сте опознали голяма част от основния речник на C ++ и сте го приложили по доста елементарен начин. На практика програмите на C ++ обикновено се състоят предимно от класове. Разработчиците се фокусират върху създаването на класове, съобразени с конкретните нужди на съответната задача. След като класовете са създадени, те се използват като типове данни за дефиниране на променливи. Тези променливи се наричат ​​обекти и след това се използват в рамките на програма.

След като създадохме нов, празен проект с main.cpp, както винаги, създаваме заглавен файл с име class.

Класът се декларира само в заглавния файл. Така че съставителят знае, че по-късно ще има клас, наречен състезателни коли. Ключовата дума public означава, че това, което следва по-долу, е достъпно отвън. Private, от друга страна, означава, че кодът по-долу може да бъде извикан само в самия клас. Все още е защитен, но той играе роля само при наследяването. За самия клас защитеният е еквивалентен на private. В примера е дефинирана целочислената променлива kmh. Трябва да се чете отвън, като се използва метод за получаване (int speed (void);). Методите rennwagen (); и състезателни коли (int kmh); са 2-те конструктора на класа. Тук конструкторът беше претоварен както с функции. В зависимост от параметрите, с които класът е създаден, компилаторът решава кой от двата да бъде извикан. Състезателна кола конструктор (int kmh); не само стартира количката, но и директно натиска педала и ускорява до 200 км/ч. Деструкторът

състезателна кола(); се извиква, когато екземплярът е унищожен с изтриване или програмата е прекратена. С методите void ускоряване (int kmh);, void спирачка (void); и int скорост (void); важат същите правила, както за нормалните функции. След това създаваме файла klasse.cpp под Източни файлове. Тук влиза кодът за самия клас.

Първо се дефинира конструкторът rennwagen: rennwagen () <>. Тъй като винаги връща обект (а именно себе си), отпред не се поставя тип данни. В конструктора вътрешната променлива kmh е адресирана с ключовата дума this и е зададена на 0. Това винаги е указателят към вашия собствен клас и променливите и методите могат да бъдат достъпни в рамките на класа. На конзолата също се извежда текст.

Тогава се дефинира деструкторът на класа. Можете да го разпознаете по факта, че той има точно същото име като конструктора, като разликата е едната тилда

стои отпред. Трябва да присъства само ако е и в декларацията на заглавката. Не е поставен тип данни пред destructur. В този случай променливата kmh е зададена на 0.

Останалите методи трябва да се обясняват сами по себе си, при спазване на правилата за функциите.

След това трябва да адаптираме main.cpp.

Тук е важно да е включен заглавният файл klasse.h. Ако това бъде забравено, компилаторът не може да намери класа, деклариран във файла. Когато създаваме инстанция на класа, сега имаме на разположение 2 конструктора. В примера беше извикан конструкторът rennwagen (). Това просто стартира количката. Другият конструктор, от друга страна, изглежда е „в движение“, тъй като стартира двигателя и го ускорява директно до 199 км/ч. След като класът е създаден, имаме обект от класа на състезателните автомобили в променливата Bmw. Променливите на класа (наречени свойства) и методите вече са достъпни чрез Bmw, последвано от точка (доколкото променливите или методите са дефинирани като публични). Bmw.kmh не е разрешен извън класа, тъй като е обявен за частен.

Разбира се, може да се използва и указател.

Наследяване на класа

Класовите методи и променливи (свойства) могат да бъдат прехвърлени (наследени) в други класове. В горния пример е създаден класната състезателна кола. Това включва методи като ускорение (), спирачка () и скорост (). По принцип тези методи отговарят на всеки автомобил и следователно класът може да се използва като един вид основен клас.
В следващия пример ще създадем нов клас, каприо, който наследява методите на rennwagen и има малко специално оборудване.

Следващият пример показва как работи това. Но първо трябва да се създаде заглавен файл с име vererbung.h и нов изходен файл (vererbung.cpp).

Класът каприо се декларира с клас каприо. The : обществена състезателна кола означава, че класът каприо наследява всички методи и променливи (свойства) от класа на състезателните автомобили. Предпоставката е, разбира се, че методите и променливите (свойствата), които са в състезателните автомобили и които трябва да се използват в каприо, са публични или защитени. В самия клас caprio декларираме 2-те конструктора и метода verdeck () в cpp файл.
Интересен е конструкторът caprio (int kmh). По-рано, в класа на състезателните автомобили, ние също претоварихме нормалния конструктор със състезателни автомобили (int kmh). Така че би било предимство, ако се извика претовареният конструктор caprio (int kmh), така че след това да се зареди не стандартният конструктор родител, а родител (int kmh). За да бъде възможно нещо подобно, съответният конструктор трябва да бъде дефиниран в заглавния файл: caprio (int kmh): състезателна кола (kmh)
Конструкторът на родителския клас, който трябва да бъде извикан, включително необходимите параметри, просто се отбелязва след двоеточието и пред тялото на функцията.

В vererbung.cpp е дефиниран само методът verdeck (), в противен случай имаме само конструктори и те вече са дефинирани.

Тъй като вече имаме нов клас, разбира се, трябва да променим и кода на main.cpp.

Когато инстанцира новия клас, първоначално се изпълнява първоначалният конструктор на състезателни автомобили, тъй като от него се получава класът на каприо. След това се извиква конструкторът на каприо, който от своя страна извиква метода verdeck ().

Извикване на верижен метод

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

С клас на дефиниция & rCall (); връща се собственият обект. Ако методът върне свой собствен обект, друг метод може да бъде достъпен директно чрез оператора за избор на компонент (в този случай периода.). Методите обаче трябва да бъдат дефинирани като публични.

С дефиниционния клас * pCall (); собственият обект също се връща, но като указател. До друг метод може да се стигне и директно чрез оператора за избор на компонент (в този случай стрелката с тире ->). Методите също трябва да бъдат публично достъпни отново. Лично аз мисля, че вариантът -> е по-приятен, защото бях разработил PHP преди 10 години.:)