«C++»–ի խմբագրումների տարբերություն

«օբյեկտային կողմնորոշված» -> «օբյեկտ կողմնորոշված»
(«օբյեկտային կողմնորոշված» -> «օբյեկտ կողմնորոշված»)
<code>delete</code> գործողությունը ստուգում է, արդյո՞ք իր արգումենտը զրոյական ցուցիչ չէ, հակառակ դեպքում նա ոչինչ չի անում։ non-POD դասային տիպի օբյեկտ ինիցիալիզացնելու համար new արտահայտություւնը կանչում է կառուցողին։ Դասային տիպի օբյեկտի հեռացման համար delete արտահայտությունը կանչում է ապակառուցողին (տես՝ [[#Կառուցողներ և ապակառուցողներ|ներքևում]])։
 
=== ՕբյեկտայինՕբյեկտ կողմնորոշված հնարավորություններ ===
C++-ը, ի տարբերություն [[C (ծրագրավորման լեզու)|C լեզվի]], ունի օբյեկտայինօբյեկտ կողմնորոշված հնարավորություններ։ Այն ունի դասեր, որոնք ապահովում են [[Օբյեկտ կողմնորոշված ծրագրավորում|օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորման]] երեք կարևոր հատկությունները՝ [[Ինկապսուլյացիա (ծրագրավորում)|ինկապսուլյացիան]], [[Ժառանգություն (ծրագրավորում)|ժառանգությունը]] և [[Պոլիմորֆիզմ (ծրագրավորում)|պոլիմորֆիզմը]]:
 
C++-ի ստանդարտում դաս (class) ասելով հասկանում են օգտագործողի կողմից ստեղծված տիպ, որն հայտարարված է <code>class</code>, <code>struct</code> կամ <code>union</code> բանալի բառերից մեկի օգնությամբ, կառույց (structure) ասելով հասկանում ենք դաս, որն հայտարարված է struct բանալի բառի օգնությամբ, և միացություն (union) ասելով հասկանում են դաս, որն հայտարարված է union բանալի բառի օգնությամբ։
 
==== Պոլիմորֆիզմ ====
C++-ի տիպերի համակարգի քերականությունը պոլիմորֆ չէ (ի տարբերություն [[ML]]-ի ժառանգորդների, այդ թվում [[C (ծրագրավորման լեզու)|C]] լեզվի հիբրիդների՝ [[BitC (ծրագրավորման լեզու)|BitC]], [[Cyclone (ծրագրավորման լեզու)|Cyclone]]), սակայն կան [[Պոլիմորֆիզմ (ծրագրավորում)|պոլիմորֆ վարքն]] ապահովելու մի քանի եղանակներ։ Ամենից առաջ դա ժառանգման ժամանակ դասերի մեթոդների վերբեռնումն է՝ տվյալների աբստրակցիայի ապահովման [[օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորում|օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորման]] համար ավանդական դարձած եղականը։ Այնուհետև [[Պոլիմորֆիզմ (ծրագրավորում)#Պարամետրիկ պոլիմորֆիզմ|պարամետրիկ պոլիմորֆիզմի]] (C++-ի համայնքում սովորաբար անվանվող «ընհանրացված ծրագրավորման») համար կա իրականացման երկու եղանակ։ Առաջին եղանակը ժառանգված է C-ից։ Այն հիմնված է առանց տիպի ցուցչի օգտագործման և տիպի այլ տվյալներից կախված բերման վրա։ Սա C++-ում ավանդաբար համարվում է վտանգավոր եղանակ։ Երկրորդ եղանակը կաղապարների օգտագործումն է, սակայն, ի տարբերություն պարամետրիկ պոլիմորֆիզմի սովորական իրականացումների, C++-ում տեղի է ունենում վերբեռնված մոնոմորֆ ֆունկցիաների ընտանիքի ինքնուրույն գեներացիա, որն հիմնված է պոլիմորֆ որոշչի (կաղապարի)՝ համապատասխանաբար նրա օգտագործման կոնտեքսի վրա, այսինքն ելատեքստային կոդի մակարդակի պարամետրիկ պոլիմորֆիզմը թարգմանվում է մեքենայական մակարդակի [[Պոլիմորֆիզմ (ծրագրավորում)#Իրավիճակային (ad hoc) պոլիմորֆիզմ|իրավիճակայինի (ad hoc)]], ինչի համար C++-ն ենթարդկվում է քննադատությունների։ C++-ում կա նաև վերբեռնման երրորդ եղանակ՝ [[#Օպերատորների վերբեռնում|օպերատորների վերբեռնումը]], որը դասերի ժառանգման հետ համադրված տալիս է էլ ավելի շատ հնարավորություններ կոդի ընթերցումն հեշտացնելու համար ի շնորհիվ, այսպես կոչված, «[[շարահյուսական շաքար]]ի» ներմուծման։
 
Տվյալների աբստրակցիան ապահովելու համար անհրաժեշտ է կապել մի քանի դասեր ժառանգման հիերարխիայի մեջ և ֆունկցիաները նշանակել միանման սպեցիֆիկատորներով։ Օրինակ՝
C++-ում մաքուր վիրոտուալ ֆունկցիայի հասկացության հետ սերտորեն կապված է «աբստրակտ դաս» հասկացությունը։ ''Աբստրակտ դաս'' են անվանում այն դասը, որն ունի գոնե մեկ չվերասահմանված մաքուր վիրտուալ ֆունկցիա-անդամ։ Այսպիսի դասերի օրինակների ստեղծումը թույլատրված չէ։ Աբստրակտ դասերը կարող են օգտագործվել միայն ժառանգման ճանապարհով նոր դասերի ստեղծման համար։ Եթե աբստրակտ դասի ժառանգորդ-դասում ժառանգված բոլոր մաքուր վիրտուալ ֆունկցիաները վերասահմանված չեն, ապա այդպիսի դասը նույնպես հանդիսանում է աբստրակտ դաս և նրա վրա նույնպես տարածվում են նշված բոլոր սահմանափակումները։
 
Աբստրակտ դասերը հաճախ օգտագործվում են որպես [[Միջերես (օբյեկտայինօբյեկտ կողնորոշված ծրագրավորում)|միջերեսներ]]: Ի տարբերություն այլ լեզուների միջերեսների, C++ լեզվի աբստրակտ դասերը կարող են ունենալ ոչ վիրտուալ ֆունկցիաներ և անդամ-տվյալներ։
 
==== Ինկապսուլյացիա ====
=== Նոր հնարավորություններ ===
C++ լեզվի նոր հնարավորությունները, որոնք բացակայում էին C լեզվում՝
* [[օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորում|օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորման]] աջակցում,
* ընդհանրացված ծրագրավորման աջակցություն [[C++-ի կաղապարները|կաղապարների]] միջոցով,
* լրացուցիչ [[տվյալների տիպեր]],
 
=== C++-ը իր մեջ չի ներառում C-ն ===
Չնայած նրան, որ C լեզվով գրված կոդի մեծ մասը կաշխատի նաև C++-ում, վերջինս իր մեջ չի ներառում C լեզուն։ Գոյություն ունի նաև C լեզվի համար աշխատող այնպիսի կոդ, որը չի աշխատում C++-ում։ Սա է C++-ի տարբերությունը [[Objective C]]-ից՝ C լեզվի [[օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորում|օբյեկտայինօբյեկտ կողմնորոշված ծրագրավորման]] ևս մեկ բարելավում, որն հենց ամբողջությամբ ներառում է C լեզուն։
 
Գոյություն ունեն նաև ուրիշ տարբերություններ։ Օրինակ, C++-ը չի թույլատրում կանչել <code>main()</code> ֆունկցիան ծրագրի ներսում, այն ժամանակ, երբ C-ում այդ գործողությունը թույլատրվում է։ Բացի այդ, C++-ն որոշ հարցերում ավելի խիստ է․ օրինակ, այն չի թույլատրում դեռևս չհայտարարված ֆունկցիաների օգատգործումը։
3107

edits