Си хэл хэзээ үүссэн бэ? §1 Хэлний талаархи ерөнхий мэдээлэл

C++ (c-plus-plus-г уншина уу) нь эмхэтгэсэн, статик хэлбэрээр бичигдсэн ерөнхий зориулалтын програмчлалын хэл бөгөөд та ямар ч түвшний нарийн төвөгтэй програмуудыг үүсгэж болно.
20 гаруй жилийн турш энэ хэл нь хамгийн алдартай, эрэлт хэрэгцээтэй гурван програмчлалын хэлний нэг байсаар ирсэн. (Та үүнийг TIOBE вэбсайтад зочилж баталгаажуулах боломжтой).
Энэ хэл нь 1980-аад оны эхээр Bell Labs-ийн ажилтан Бьорн Строуструп өөрийн хэрэгцээнд зориулан Си хэлэнд хэд хэдэн сайжруулалт хийснээр үүссэн.

Bjarne Stroustrup - C++ хэлийг бүтээгч

Stroustrup нь Си хэлийг Simula хэл дээр олдсон чадвараар өргөжүүлэхээр шийдсэн. С хэл байх үндсэн хэл Bell компьютерууд ажилладаг UNIX систем нь хурдан, олон функцээр баялаг, зөөврийн систем юм. Stroustrup нь ангиуд болон объектуудтай ажиллах чадварыг нэмсэн. Үүний үр дүнд практик асуудлуудСимуляци нь боловсруулах хугацааны хувьд (Simul-тэй төстэй ангиудыг ашигласны ачаар) болон тооцоолох хугацааны хувьд (С-ийн хурдны ачаар) аль алиныг нь шийдвэрлэх боломжтой болсон.
Хэл хөгжүүлэгч өөрөө энэ тухай ингэж ярьж байна:



1998 онд C++98 гэгддэг анхны хэлний стандартыг стандартын хороо нийтэлсэн. C++ хариу үйлдэл үзүүлэхийн тулд үргэлжлүүлэн хөгжиж байна орчин үеийн шаардлага. С++ хэлийг хөгжүүлж, түүнийг сайжруулах саналаа C++ стандартын хороонд хүргүүлдэг бүлгүүдийн нэг юм. Өсгөх, энэ нь бусад зүйлсийн дунд метапрограмчлалын функцүүдийг нэмж хэлнийхээ чадварыг сайжруулахад оролцдог. Хамгийн сүүлийн үеийн стандартыг 2017 онд гаргасан бөгөөд үүнийг дууддаг C++ 17. Дараагийн стандарт удахгүй гарахгүй бөгөөд 2020 онд гарах төлөвтэй байна.
C++ хэлний эрхийг хэн ч эзэмшдэггүй. 2016 оны 3-р сард Орос улс байгуулагдсан ажлын хэсэг RG21 C++. Энэ бүлгийг С++ стандартын санал цуглуулж, хороонд илгээж, Олон улсын стандартчиллын байгууллагын нэгдсэн хуралдаанд хамгаалах зорилгоор зохион байгуулжээ.
C++ бол олон парадигмын хэл (paradigm - бичих хэв маяг гэсэн үгнээс гаралтай). компьютерийн програмууд), өргөн хүрээг хамарсан янз бүрийн хэв маягболон програмчлалын технологи. Энэ нь ихэвчлэн объект хандалтат хэл гэж ангилдаг боловч хатуухан хэлэхэд энэ нь тийм биш юм. Ажлын явцад хөгжүүлэгч нь багаж хэрэгслийг сонгохдоо үнэмлэхүй эрх чөлөөг олж авдаг бөгөөд ингэснээр тодорхой аргыг ашиглан шийдсэн асуудлыг аль болох үр дүнтэй шийдвэрлэх боломжтой болно. Өөрөөр хэлбэл, C++ нь программистыг зөвхөн нэг программ боловсруулах хэв маягийг (жишээлбэл, объект хандалт) баримтлахыг албаддаггүй.
C++ нь нийтлэг контейнер, алгоритм, оролт гаралт, тогтмол илэрхийлэл, олон урсгалын дэмжлэг болон бусад функцуудыг агуулсан баялаг стандарт номын сантай. C++ нь Java, C#, D зэрэг олон програмчлалын хэлүүдэд нөлөөлсөн. C++ нь Си хэлний синтакс дээр суурилсан хэлний бүлэгт хамаардаг тул та энэ гэр бүлийн бусад програмчлалын хэлүүдийг хялбархан эзэмших боломжтой: JavaScript, PHP , Perl, Objective-C болон бусад олон . гэх мэт, үүнд эцэг эх хэл нь өөрөө - C. ()
С++ хэл нь оршин тогтнох хугацаандаа амархан няцаагддаг тууштай домогуудыг олж авсан (эндээс: 1 ба 2-р хэсгийг үзнэ үү)

Хэлний түүх, стандартыг гаргасан

  • 1983
  • хэлийг бүтээгч - Björn Stroustrup, Bell Labs-ийн ажилтан C++ хэлний анхны хувилбарыг (“C with classes”) нэвтрүүлсэн.

  • 1985
  • C++-ийн анхны арилжааны хувилбар нь хэлийг нэмэгдүүлэв орчин үеийн нэр

  • 1986
  • Björn Stroustrup-ийн бичсэн C++-д зориулсан The C++ програмчлалын хэлний анхны хэвлэлийг гаргалаа.

  • 1998
  • C++ хэлний олон улсын стандартыг батлав: ISO/IEC 14882:1998 “Стандарт төлөө C++ програмчлалын хэл"

  • 2003
  • 2005
  • Номын сангийн техникийн тайлан 1 (TR1) гарлаа. Албан ёсоор стандартын нэг хэсэг биш ч тайланд C++ хэлний дараагийн хувилбарт оруулах ёстой стандарт номын сангийн өргөтгөлүүдийг тайлбарласан болно.

  • 2011
  • шинэ стандартыг гаргах - C++ 11 эсвэл ISO/IEC 14882:2011; шинэ стандартХэлний үндсэн нэмэлтүүд болон стандарт номын сангийн өргөтгөл, түүний дотор TR1-ийн ихэнх хэсгийг багтаасан

  • 2014
  • C++ 14 стандартыг гаргах (“Олон улсын стандарт ISO/IEC 14882:2014(E) C++ програмчлалын хэл”); C++ 14-ийг C++ 11-тэй харьцуулахад жижиг өргөтгөл гэж үзэж болох бөгөөд үүнд ихэвчлэн алдаа засварууд болон бага зэргийн сайжруулалтууд багтсан болно.

  • 2017
  • шинэ стандартыг гаргах - C++ 1z (C++ 17). Энэхүү стандарт нь олон өөрчлөлт, нэмэлтүүдийг оруулсан. Жишээлбэл, STD нь C11 стандартын номын сангууд, файлын систем, boost::fileystem дээр суурилсан, ихэнх ньтуршилтын номын сан TS I.

C++ Философи

Björn Stroustrup "The Design and Evolution of C++" (2007) номондоо C++ хэлийг зохион бүтээхдээ баримталж байсан зарчмуудаа (товчилсон) тодорхойлсон байдаг.

  • Авах бүх нийтийн хэлстатик өгөгдлийн төрлүүд, Си хэлний үр ашиг, зөөврийн байдал.
  • Төрөл бүрийн програмчлалын хэв маягийг шууд бөгөөд иж бүрэн дэмждэг.
  • Програмист буруу сонголт хийх боломжийг олгосон ч гэсэн сонгох эрх чөлөөг нь өг.
  • С-тэй нийцтэй байдлыг аль болох хадгалж, ингэснээр боломжтой болгоно хялбар шилжилт C програмчлалаас.
  • C ба C++ хоёрын хооронд зөрүү гарахаас зайлсхий: хоёр хэл дээр хүчинтэй аливаа бүтэц нь тус бүрдээ ижил утгатай байх ёстой бөгөөд програмын ижил үйлдэлд хүргэдэг.
  • Платформоос хамааралтай эсвэл түгээмэл биш онцлог шинж чанаруудаас зайлсхий.
  • "Ашиглаагүй зүйлийнхээ төлөө бүү төлбөр" - үгүй хэл шинжлэлийн төхөөрөмжашигладаггүй программуудын гүйцэтгэлийг бууруулж болохгүй.
  • Хэт төвөгтэй програмчлалын орчин шаардлагагүй.

C ба C++

C++ хэлний синтакс нь Си хэлнээс удамшсан боловч албан ёсоор C++-ийн зарчмуудын нэг нь Си хэлтэй нийцтэй хэвээр байгаа боловч үнэн хэрэгтээ эдгээр хэлний стандартчиллын бүлгүүд харилцан үйлчлэлцдэггүй бөгөөд тэдгээрийн өөрчлөлтүүд байдаггүй. зөвхөн харилцан хамааралгүй боловч ихэнхдээ үзэл суртлын хувьд хоорондоо зөрчилддөг. Тиймээс шинэ Си стандартуудын цөмд нэмж байгаа элементүүд нь стандарт номын сангийн C++ стандарт элементүүдэд байдаг ба цөмд огт байдаггүй, тухайлбал динамик массивууд, тогтмол хил хязгаартай массивууд, зэрэгцээ боловсруулах байгууламжууд. Строуструпын хэлснээр эдгээр хоёр хэлийг хослуулах нь маш их ашиг тустай боловч улс төрийн шалтгаанаар боломжгүй юм. Тиймээс C ба C++-ийн практик нийцтэй байдал аажмаар алга болно.
IN энэ жишээнд, ашигласан хөрвүүлэгчээс хамааран "C++" эсвэл "C" гаралт болно:

#оруулна int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++": "C"); буцаана 0; )

Энэ нь С хэл дээрх тэмдэгтийн тогтмолууд int төрлийн, харин С++ хэл дээрх -тэй холбоотой юм. char гэж бичнэ үү, гэхдээ эдгээр төрлүүдийн хэмжээ өөр өөр байдаг.

Хэрэглээний амьдралын мөчлөгийн загварууд

Амьдралын мөчлөгпрограм хангамж гэдэг нь бий болгох хэрэгцээний талаар шийдвэр гаргасан мөчөөс эхэлдэг хугацаа юм програм хангамжийн бүтээгдэхүүнүйлчилгээнээс бүрэн татгалзсан мөчид дуусна. Энэ мөчлөг нь програм хангамж бүтээх, хөгжүүлэх үйл явц юм. Хэд хэдэн загвар байдаг амьдралын мөчлөг.
Каскадын загварамьдралын мөчлөг (Англи хүрхрээ загвар) 1970 онд Уинстон Ройс санал болгосон. Энэ нь төслийн бүх үе шатыг нарийн чанд дарааллаар хэрэгжүүлэх боломжийг олгодог тогтмол захиалга. Дараагийн шат руу шилжих нь өмнөх үе шатны ажлыг бүрэн дуусгах гэсэн үг юм. Шаардлагыг бүрдүүлэх үе шатанд тодорхойлсон шаардлагыг маягт дээр хатуу баримтжуулсан болно ажлын даалгавармөн төслийн бүх боловсруулалтын явцад бүртгэнэ. Үе шат бүр нь хөгжүүлэлтийг өөр хөгжүүлэлтийн баг үргэлжлүүлэх боломжийг олгоход хангалттай баримт бичгийн иж бүрэн багцыг гаргаснаар төгсдөг.
Хүрхрээ загварын дагуу төслийн үе шатууд:

  1. Шаардлагыг бүрдүүлэх;
  2. Дизайн;
  3. Хэрэгжилт;
  4. Туршилт хийх;
  5. Хэрэгжилт;
  6. Ашиглалт, засвар үйлчилгээ.

Каскадын загварт төслийн нэг үе шатаас нөгөөд шилжих нь өмнөх үе шатны үр дүн бүрэн зөв байна гэж үздэг. IN томоохон төслүүдүүнд хүрэх нь бараг боломжгүй юм. Тиймээс энэ загвар нь зөвхөн жижиг төсөл боловсруулахад тохиромжтой. (В.Ройс өөрөө энэ загварыг баримтлаагүй бөгөөд давтагдах загвар ашигласан).
Давталтын загвар
Каскадын загвараас өөр хувилбар бол 70-аад онд Т.Гилбээс хүлээн авсан давталтын болон нэмэгдэл хөгжлийн (IID) загвар юм. хувьслын загварын нэр. IID загвар нь төслийн амьдралын мөчлөгийг давталтын дараалал болгон хуваах бөгөөд тэдгээр нь тус бүр нь "мини төсөл"-тэй төстэй бөгөөд төсөлтэй харьцуулахад жижиг функцийг бий болгоход хэрэглэгдэх бүх хөгжүүлэлтийн процессуудыг багтаадаг. Давталт бүрийн зорилго нь өмнөх болон одоогийн бүх давталтын нэгдсэн агуулгаар тодорхойлогдсон функцийг багтаасан програм хангамжийн системийн ажлын хувилбарыг олж авах явдал юм. Эцсийн давталтын үр дүн нь бүтээгдэхүүний шаардлагатай бүх функцийг агуулдаг. Тиймээс, давталт бүрийг дуусгах тусам бүтээгдэхүүн нь өөрийн чадавхийн нэмэгдэл буюу өсөлтийг авдаг бөгөөд ингэснээр хувьслын замаар хөгждөг.

Орос улсад хэрэглээний амьдралын мөчлөгийн стандартчилал

Улсын стандарт нь хэрэглээний амьдралын мөчлөгийг нарийвчлан тодорхойлдог ГОСТ Р ISO/IEC 12207-2010 " Мэдээллийн технологи. Систем ба програм хангамжийн инженерчлэл. Програм хангамжийн амьдралын мөчлөгийн үйл явц". Энэ стандартыг хүлээн зөвшөөрч байна Холбооны агентлагОХУ-ын техникийн зохицуулалт, хэмжилзүйн тухай бөгөөд ISO/IEC 12207:2008 олон улсын стандарттай төстэй. Энэхүү стандартыг тогтооно ерөнхий бүтэцПрограм хангамжийн салбарт удирдаж болох програм хангамжийн амьдралын мөчлөгийн үйл явц. Стандарт нь амьдралын мөчлөгийн тодорхой загварыг санал болгодоггүй. Түүний заалтууд нь програм хангамж бүтээх амьдралын мөчлөгийн аливаа загвар, арга, технологид нийтлэг байдаг. Энэ нь эдгээр үйл явцад багтсан үйл ажиллагаа, даалгавруудыг хэрхэн хэрэгжүүлэх, дуусгахыг заагаагүй бол амьдралын мөчлөгийн үйл явцын бүтцийг тодорхойлдог.

Хөгжлийн үйл явц - оновчтой нэгдсэн үйл явц (RUP)

Ихэнх орчин үеийн хөгжлийн арга зүйд давтагдах аргын янз бүрийн хувилбаруудыг хэрэгжүүлдэг.

оновчтой нэгдсэн үйл явц (RUP)(rational united process) нь Rational Software (IBM)-ээр хангадаг програм хангамж хөгжүүлэх арга зүй юм. Энэхүү аргачлал нь бизнесийн загварчлалаас эхлээд туршилт, ашиглалтад оруулах хүртэлх хөгжлийн бүх үе шатанд зөвлөмж өгдөг дууссан програм. Загварын хэлээр нэгдсэн загварчлалын хэл (UML) ашиглагддаг.
Бүтээгдэхүүнийг хөгжүүлэх бүрэн амьдралын мөчлөг нь дөрвөн үе шатаас бүрдэх бөгөөд тус бүр нь нэг буюу хэд хэдэн давталтаас бүрдэнэ.

  • Эхний үе шат (Эхлэх)
  • Төслийн цар хүрээ, шаардагдах нөөцийн хэмжээг тодорхойлох. Бүтээгдэхүүний үндсэн шаардлага, хязгаарлалт, үндсэн функцийг тодорхойлсон. Эрсдэлийг үнэлдэг. Үйл ажиллагааны төлөвлөлт. Дуусмагц эхний үе шатАмьдралын мөчлөгийн зорилтын амжилтыг үнэлдэг бөгөөд энэ нь төслийг үргэлжлүүлэх талаар оролцогч талуудын хооронд тохиролцоонд хүрэхийг шаарддаг.

  • Тодруулга
  • Баримт бичгийн шаардлага. Гүйцэтгэх архитектурын дизайн, хэрэгжилт, туршилт. Нөхцөл ба зардлыг тодруулах. Гол эрсдэлийг бууруулах. Хөгжлийн үе шатыг амжилттай дуусгах нь амьдралын мөчлөгийн архитектурын чухал үе шатанд хүрнэ гэсэн үг юм.

  • Барилга
  • "Бүтээх" үе шатанд бүтээгдэхүүний ихэнх функцууд хэрэгждэг: програмын дизайн дууссан, эх код бичигдсэн. Бүтээлийн үе шат нь системийн анхны гадаад хувилбар болон Анхны үйл ажиллагааны чадавхийн чухал үе шатанд дуусдаг.

  • Танилцуулга
  • "Хэрэгжүүлэх" үе шатанд бүтээгдэхүүний эцсийн хувилбарыг бий болгож, хөгжүүлэгчээс хэрэглэгч рүү шилжүүлдэг. Үүнд бета туршилтын хөтөлбөр, хэрэглэгчийн сургалт, бүтээгдэхүүний чанарыг тодорхойлох зэрэг орно. Хэрэв чанар нь хэрэглэгчийн хүлээлт эсвэл Эхлэх үе шатанд тавигдсан шалгуурт нийцэхгүй бол Хэрэгжүүлэх үе шат дахин давтагдана. Бүх зорилгоо биелүүлнэ гэдэг нь Бүтээгдэхүүний нээлтийн үе шатанд хүрч, хөгжлийн бүрэн мөчлөгийг дуусгана гэсэн үг юм.


Бжарн Строструптай хийсэн яриа


Embarcadero C++ Builder ашигладаг хөгжүүлэгчдэд зориулсан онлайн хурал. C++ хэлний домогт бүтээгч Бжарн Строуструптай хийсэн яриаг Эмбаркадерогийн хөгжүүлэгчтэй харилцах албаны дэд ерөнхийлөгч Дэвид Интерсимоне хөтлөв. (Дубль орчуулга).

C хэл("C"-г уншина уу) 70-аад оны эхээр Bell Labs-ийн Кен Томпсон, Деннис Ричи нар хөгжих үед бүтээгдсэн. үйлдлийн систем UNDC. Тэд эхлээд C хөрвүүлэгчийн хэсгийг бүтээж, дараа нь хөрвүүлэгчийн үлдсэн хэсгийг эмхэтгэхдээ ашигласан ХАМТэцэст нь үүссэн хөрвүүлэгчийг ашиглан UNIX-ийг эмхэтгэсэн. UNIX үйлдлийн системийг эх кодоор нь анх түгээсэн ХАМТих дээд сургууль, лабораторийн дунд байдаг бөгөөд хүлээн авагч нь C эх кодыг тохирох кодыг ашиглан машины код болгон хөрвүүлж болно. C хөрвүүлэгч.

Эх кодын хуваарилалт нь UNIX үйлдлийн системийг өвөрмөц болгосон; Програмист нь үйлдлийн системийг өөрчилж, эх кодыг нэг техник хангамжийн платформоос нөгөөд шилжүүлэх боломжтой. Өнөөдөр POSIX стандартыг тодорхойлдог стандарт багц UNIX системийн дуудлага хийх боломжтой ХАМТ UNIX-ийн POSIX-д нийцсэн хувилбаруудад хэрэгжих ёстой. ХАМТ UNIX-ийг бүтээх явцад Томсон, Ричи нарын боловсруулсан гурав дахь хэл байсан; Эхний хоёр нь мэдээжийн хэрэг АТэгээд IN.

Илүү ихтэй харьцуулахад эрт хэл- BCPL, ХАМТтодорхой урттай өгөгдлийн төрлийг нэмж сайжруулсан. Жишээлбэл, өгөгдлийн төрөл int-аар хувьсагч үүсгэхэд ашиглаж болно тодорхой тообит (ихэвчлэн 16), харин өгөгдлийн төрөл уртбүхий бүхэл бүтэн хувьсагчийг үүсгэхэд ашиглаж болно их тообит (ихэвчлэн 32). Бусад хэлнээс ялгаатай өндөр түвшин, ХАМТзаагч болон лавлагаа ашиглан санах ойн хаягуудтай шууд ажиллах боломжтой. Түүнээс хойш ХАМТшууд хандах боломжийг хадгалсан техник хангамж, үүнийг ихэвчлэн дунд түвшний хэл гэж ангилдаг эсвэл "хөдөлгөөнт ассемблер хэл" гэж хошигнодог.

Дүрэм, синтаксийн хувьд гэвэл ХАМТбайна бүтцийн хэлпрограмчлал. Орчин үеийн олон програмистууд анги, объектын хувьд сэтгэдэг бол програмистууд ХАМТжурам, чиг үүргийн хувьд бодож үзээрэй. IN ХАМТтүлхүүр үг ашиглан өөрийн хийсвэр өгөгдлийн төрлийг тодорхойлж болно бүтэц. Үүнтэй адилаар та өөрийн бүхэл тооны төрлийг (тооллого) тодорхойлж, өөр нэр өгч болно одоо байгаа төрлүүдөгөгдөл ашиглан түлхүүр үг typedef. Энэ утгаараа ХАМТнь объект хандалтат програмчлалын үр хөврөл бүхий бүтэцлэгдсэн хэл юм.

Өргөн тархсан C хэлдээр янз бүрийн төрөлХарамсалтай нь компьютерууд (заримдаа техник хангамжийн платформ гэж нэрлэдэг) хэлний олон хувилбарт хүргэсэн. Тэд ижил төстэй байсан ч бие биетэйгээ нийцэхгүй байв. Энэ нь олон платформ дээр ажиллах боломжтой нийцтэй програм бичих шаардлагатай програм хангамж хөгжүүлэгчдэд томоохон асуудал байсан. Шаардлагатай гэдэг нь тодорхой болсон стандарт хувилбар C. 1983 онд ANSI (Америкийн Үндэсний Стандартын Хороо) хэлний стандартыг бий болгохын тулд X3J11 техникийн хороог байгуулжээ. C("хэлний хоёрдмол утгагүй, машинаас хамааралгүй тодорхойлолтыг өгөх"). 1989 онд стандарт батлагдсан. ANSI нь ISO-тай хамтран ажилласан ( Олон улсын байгууллагастандарт) стандартчилах Cолон улсын хэмжээнд; хамтарсан стандартыг 1990 онд нийтэлсэн бөгөөд ANSI/ISO 9899:1990 гэж нэрлэсэн. Энэ стандартыг сайжруулсаар байгаа бөгөөд ихэнх хөрвүүлэгч хөгжүүлэгчид дэмжигддэг.

Бжарне Строструпобъект хандалтат потенциалыг нээлээ ХАМТангийн чадварыг шилжүүлэх замаар Симула 67В ХАМТ. Эхэндээ шинэ хэл"Ангиудтай" гэсэн нэртэй байсан бөгөөд зөвхөн дараа нь дуудаж эхлэв C++. Хэл C++ Bell Labs-д боловсруулсны дараа алдартай болсон бөгөөд дараа нь бусад үйлдвэр, корпорациудад шилжсэн. Өнөөдөр энэ нь хамгийн олон хүмүүсийн нэг юм алдартай хэлүүддэлхий дээрх програмчлал. C++сайн ба аль алиныг нь өвлөн авдаг муу талууд ХАМТ.

Бжарне Строструп: "Би C++-ийг гаргаж ирээд, түүний анхны тодорхойлолтыг бичиж, анхны хэрэгжилтээ дуусгасан. Би дизайны шалгуурыг сонгож, томъёолсон. C++, түүний үндсэн шинж чанаруудыг боловсруулж, стандартчиллын хороонд хэлийг өргөжүүлэх саналуудын хувь заяаг хариуцаж байв. C++"гэж хамгийн алдартай програмчлалын хэлний зохиогч бичжээ. -" C++ хэлхэлэнд их өртэй C, болон хэл Cдэд олонлог хэвээр байна C++ хэл(гэхдээ C++ нь C төрлийн системийн хэд хэдэн ноцтой дутагдлыг зассан). Би бас мөнгө хэмнэсэн C, эдгээр нь системийн хамгийн чухал даалгавруудыг шийдвэрлэхэд хангалттай бага түвшин юм. C хэл, эргээд өөрийн өмнөх BCPL-д маш их өртэй; Дашрамд дурдахад // тайлбарын хэв маягийг BCPL-ээс C++-д оруулсан болно. Урам зоригийн өөр нэг гол эх сурвалж нь Simula67 хэл байв. Ангиудын тухай ойлголтыг (үүсмэл анги, виртуал функцтэй) үүнээс зээлсэн. Операторын хэт ачааллыг хангах байгууламж, заавар бичиж болох хаана ч мэдүүлэг байрлуулах чадвар нь Algol68-ыг санагдуулдаг. "

Нэр C++Рик Масситти зохион бүтээсэн. Энэ нэр нь C хэлнээс түүн рүү шилжих хувьслын шинж чанарыг харуулж байна. "++" нь C хэл дээрх өсөлтийн оператор юм. С+ хэлнээс арай богино нэр нь синтакс алдаа; үүнээс гадна энэ нь аль хэдийн огт өөр хэлний нэрээр ашиглагдаж байсан. С семантик судлаачид үүнийг олж мэдсэн C++++C-ээс муу. Энэ хэл нь C хэлний өргөтгөл бөгөөд янз бүрийн шинж чанаруудыг хаях замаар асуудлыг арилгахыг оролддоггүй тул D гэж нэрлээгүй ...

Эхэндээ C++ програмчлалын хэлЗохиогч болон түүний найзууд ассемблер хэл, Си болон бусад хэлээр програмчлах шаардлагагүй байхаар бүтээгдсэн орчин үеийн хэлнүүдөндөр түвшин. Үүний гол зорилго нь бичих явдал байв сайн хөтөлбөрүүдилүү энгийн бөгөөд хувь хүн програмист илүү тааламжтай. Хөгжлийн төлөвлөгөө C++цаасан дээр хэзээ ч байгаагүй; зураг төсөл, баримт бичиг, хэрэгжилт нэгэн зэрэг хөдөлсөн. Мэдээжийн хэрэг, гадаад интерфейс C++-д бичигдсэн байв C++. "С++ төсөл" эсвэл "С++ хөгжлийн хороо" гэж хэзээ ч байгаагүй. Тийм ч учраас C++хэрэглэгчдэд тулгарч буй сорилтуудыг даван туулахын тулд болон зохиогчийн найз нөхөд, хамтран ажиллагсадтайгаа ярилцах замаар бүх чиглэлд хувьсан өөрчлөгдөж, хөгжиж байна.

IN C++ хэлОбъект хандалтат програмчлалын зарчмуудыг бүрэн дэмждэг бөгөөд үүнд түүний тулгуурласан гурван тулгуур багана багтдаг: инкапсуляция, удамшил, полиморфизм. C++ хэл дээрх капсулжуулалтанги гэж нэрлэгддэг стандарт бус (захиалгат) өгөгдлийн төрлүүдийг бий болгох замаар дэмжигддэг. C++ хэлөв залгамжлалыг дэмждэг. Энэ нь та мэдүүлэх боломжтой гэсэн үг юм шинэ төрөлөгөгдөл (анги) нь одоо байгаа нэгний өргөтгөл юм.

Хэдийгээр C++ програмчлалын хэлнь С-ийн үргэлжлэл гэж зүй ёсоор нэрлэгддэг бөгөөд ямар ч ажиллах боломжтой С програмыг дэмжих болно C++ хөрвүүлэгч, C-ээс C++ руу шилжихэд маш чухал үсрэлт хийсэн. C++ хэлОлон програмистууд үүнийг бүрэн дүүрэн ашиглахын тулд үүнийг олж мэдсэн тул олон жилийн турш Си хэлтэй ойр байсны үр шимийг хүртсээр ирсэн. C++ хэл, тэд өмнөх мэдлэгийнхээ зарим хэсгийг орхиж, шинэ мэдлэг олж авах хэрэгтэй, тухайлбал: суралцах шинэ аргаүзэл баримтлал, програмчлалын асуудлыг шийдвэрлэх. Та сурч эхлэхээсээ өмнө C++, Строструпболон бусад ихэнх програмистууд ашигладаг C++Тэд С хэл сурах нь сонголт гэж үздэг.

C++ програмчлалын хэлОдоогийн байдлаар арилжааны бүтээгдэхүүн боловсруулахад ашигладаг зонхилох хэл гэж тооцогддог бөгөөд тоглоомуудын 90% нь бичигдсэн байдаг C++ DirectX ашиглан.

Уран зохиол:
H.M.Deitel, P.J.Deitel "C++ хэл дээр хэрхэн програмчлах вэ"
Bjarne Stroustrup "С++ програмчлалын хэл. 3-р хэвлэл."
Саймон Робинсон, Олли Корнес, Жей Глинн болон бусад "Мэргэжилтнүүдэд зориулсан C#".
Жесс Либерти "Өөрийгөө 21 хоногийн дотор C++ зааж сур"
Станислав Горнаков "DirectX, C++ хэл дээрх програмчлалын хичээлүүд"

Си хэлний ийм статусын шалтгаан юу вэ? Түүхээс үзэхэд энэ хэл нь одоо дахин төрөлжиж буй Unix үйлдлийн системтэй салшгүй холбоотой юм. 60-аад он бол үйлдлийн систем, өндөр түвшний програмчлалын хэл бий болсон эрин үе байв. Тухайн үед үйлдлийн системүүд болон хөрвүүлэгчийг компьютерийн төрөл тус бүрээр бие даан боловсруулж, бүр өөрсдийн програмчлалын хэлийг (жишээ нь, PL/I гэдгийг санаарай). Үүний зэрэгцээ, энэ тохиолдолд үүссэн асуудлуудын нийтлэг байдал аль хэдийн тодорхой болсон. Энэхүү нийтлэг байдлыг ухаарсан хариу үйлдэл нь бүх нийтийн гар утасны үйлдлийн системийг бий болгох оролдлого байсан бөгөөд үүний тулд бүх нийтийн болон ижил төстэй үйлдлийн системтэй байх шаардлагатай байв. гар утасны хэлпрограмчлал. Си ийм хэл болж, Unix нь бараг бүхэлдээ өндөр түвшний хэлээр бичигдсэн анхны үйлдлийн систем болсон.

Unix-тэй нягт холбоотой байсан нь Си хэлийг тухайн үед өөр ямар ч хэлээр туршиж байгаагүй туршилтын талбар болгож өгсөн. Даалгаврууд системийн програмчлалТухайн үед салбарын хамгийн нарийн төвөгтэй гэж тооцогддог байсан. Ихэнх тохиолдолд тэдгээр нь машинаас маш их хамааралтай байсан тул олон хүн үүнийг ассемблерээс өөрөөр шийдэх талаар бодож байгаагүй. Өндөр түвшний хэлүүд нь хэрэглээний програмчлалд зориулагдсан бөгөөд зөвхөн шаардлагатай маш хязгаарлагдмал функцуудыг хэрэгжүүлсэн системийн ажил, ихэвчлэн зөвхөн тодорхой төрлийн машинд зориулагдсан.

Анхнаасаа Си хэлийг бичдэг байхаар бүтээжээ системийн даалгавар. Си хэлийг бүтээгчид хэлний гүйцэтгэгчийн хийсвэр загварыг боловсруулаагүй, харин системийн програмчлалын практикт хамгийн их хэрэгтэй байсан боломжуудыг түүнд хэрэгжүүлсэн. Эдгээр нь юуны түрүүнд санах ой, бүтцийн хяналтын бүтэц, програмын модульчлагдсан зохион байгуулалттай шууд ажиллах хэрэгсэл байв. Мөн уг хэлэнд өөр юу ч ороогүй. Бусад бүх зүйлийг ажиллуулах цагийн номын санд оруулсан. Иймээс доромжлогчид заримдаа Си хэлийг бүтцийн ассемблер гэж нэрлэдэг. Гэвч тэд юу ч хэлсэн бай, арга барил нь маш амжилттай болсон. Түүний ачаар амжилтанд хүрсэн шинэ түвшинхэлний энгийн байдал, чадварын хувьд.

Гэсэн хэдий ч хэлний амжилтыг тодорхойлсон өөр нэг хүчин зүйл бий. Бүтээгчид үүнийг машинаас хамааралтай, маш чадварлаг салгасан бие даасан шинж чанарууд. Үүний ачаар ихэнх програмуудыг бүх нийтээр бичиж болно - тэдгээрийн гүйцэтгэл нь процессор болон санах ойн архитектураас хамаардаггүй. Техник хангамжаас хамааралтай кодын цөөн хэдэн хэсгийг тусдаа модулиудад байршуулж болно. Урьдчилан процессор ашиглан та өөр өөр платформ дээр хөрвүүлэхдээ машинаас хамааралтай кодыг үүсгэх модулиудыг үүсгэж болно.

Си хэлний синтакс нь маш их маргаан үүсгэсэн бөгөөд үүнд ашигласан товчилсон аргууд нь хэрвээ хэтрүүлэн хэрэглэвэл програмыг бүрэн унших боломжгүй болгодог. Гэхдээ Дийкстрагийн хэлснээр, арга хэрэгсэл нь бичиг үсэг тайлагдаагүй хэрэглэгдэж байгаад буруугүй. Үнэн хэрэгтээ C хэл дээр санал болгож буй синтакс товчлолууд нь практикт хамгийн түгээмэл хэвшмэл нөхцөл байдалтай тохирч байна. Хэрэв бид товчилсон үгсийг ийм нөхцөл байдлын илэрхийлэл, авсаархан танилцуулах хэлц үг гэж үзвэл тэдгээрийн ашиг тус нь болзолгүй бөгөөд тодорхой болно.

Тиймээс Си нь бүх нийтийн системийн програмчлалын хэл болон гарч ирэв. Гэхдээ тэр эдгээр хязгаарт хүрээгүй. 80-аад оны эцэс гэхэд Си хэл нь Фортраныг удирдагчийн байр сууринаас халж, дэлхийн програмистуудын дунд асар их нэр хүндтэй болж, олон төрлийн хэл дээр ашиглагдаж эхэлсэн. хэрэглээний асуудлууд. Шинэ үеийн програмистууд бэлтгэгдсэн их сургуулийн орчинд Unix (тиймээс C) тархсан нь энд чухал үүрэг гүйцэтгэсэн.

Бүх хэлний нэгэн адил Си хэл аажмаар сайжирсан боловч ихэнх сайжруулалт нь эрс өөрчлөгдөөгүй. Эдгээрээс хамгийн чухал нь функцын төрлүүдийн хатуу тодорхойлолтыг нэвтрүүлсэн явдал гэж үзэх нь зүйтэй бөгөөд энэ нь C хэл дээрх модуль хоорондын харилцааны найдвартай байдлыг ихээхэн нэмэгдүүлсэн. Ийм бүх сайжруулалтыг 1989 онд ANSI стандартад тусгасан бөгөөд энэ нь одоог хүртэл тодорхойлогддог. C хэл.

Гэхдээ хэрэв бүх зүйл ийм улаан өнгөтэй байвал яагаад бусад бүх хэлүүд ашиглагдсаар байгаа нь тэдний оршин тогтнохыг дэмждэг вэ? Си хэлний Ахиллес өсгий нь 90-ээд оны үед хэлэлцэх асуудлын дараалалд тавигдсан ажлуудад хэтэрхий доогуур түвшинд хүрсэн явдал байв. Түүнээс гадна энэ асуудал хоёр талтай. Нэг талаас, хэт бага түвшний хэрэгслүүдийг хэлэнд суулгасан - юуны түрүүнд санах ойн удирдлага, хаягийн арифметик. Процессоруудын битийн багтаамжийг өөрчлөх нь олон C программуудад маш их зовиуртай нөлөө үзүүлдэг нь шалтгаан биш юм. Нөгөөтэйгүүр, Си нь хийсвэр өгөгдлийн төрөл ба объект, полиморфизм, онцгой тохиолдлуудыг зохицуулах зэрэг өндөр түвшний шинж чанаруудгүй. Үүний үр дүнд C программуудад даалгаврыг хэрэгжүүлэх арга барил нь ихэвчлэн түүний агуулгад давамгайлдаг.

Эдгээр дутагдлыг засах анхны оролдлогууд 80-аад оны эхээр хийгдэж эхэлсэн. Тэр үед ч гэсэн AT&T Bell Labs-ийн Бжарне Строуструп Си хэлний өргөтгөлийг боловсруулж эхэлсэн. кодын нэр. Хөгжлийн хэв маяг нь Си хэлийг бий болгосон сүнстэй нэлээд нийцэж байсан - ажлыг илүү тохь тухтай болгохын тулд түүнд тодорхой шинж чанаруудыг нэвтрүүлсэн. тодорхой хүмүүсболон бүлгүүд. C++ хэмээх шинэ хэлний анхны арилжааны орчуулагч 1983 онд гарч ирэв. Энэ нь уг программыг C код руу хөрвүүлсэн урьдчилсан процессор байсан боловч 1985 онд Строуструпийн ном хэвлэгдсэн гэж үзэж болно. Энэ мөчөөс эхлэн C++ дэлхий даяар алдартай болж эхэлсэн.

C++-ийн гол шинэлэг зүйл бол өгөгдлийн шинэ төрлийг тодорхойлж, ашиглах боломжийг олгодог ангиллын механизм юм. Программист нь ангийн объектын дотоод дүрслэл болон энэ дүрслэлд хандах функцийн аргуудын багцыг тайлбарладаг. C++-ийг бүтээхдээ эрхэмлэдэг зорилгын нэг бол аль хэдийн бичигдсэн кодыг дахин ашиглах хувийг нэмэгдүүлэх хүсэл байв. Ангиудын үзэл баримтлал нь удамшлын механизмыг санал болгосон. Өв залгамжлал нь өргөтгөсөн төлөөлөл бүхий шинэ (үүсмэл) анги үүсгэх боломжийг олгодог өөрчилсөн аргуудэх (үндсэн) ангиудын эмхэтгэсэн кодонд нөлөөлөхгүйгээр. Үүний зэрэгцээ өв залгамжлал нь полиморфизмыг хэрэгжүүлэх нэг механизм болох объект хандалтат програмчлалын үндсэн ойлголт бөгөөд үүний дагуу ижил төрлийн боловсруулалтыг гүйцэтгэдэг. янз бүрийн төрөлөгөгдөлд ижил кодыг ашиглаж болно. Үнэндээ полиморфизм нь кодын дахин ашиглалтыг баталгаажуулах аргуудын нэг юм.

Хичээлүүдийг нэвтрүүлэх нь C++ хэлний бүх шинэчлэлийг шавхдаггүй. Энэ нь бүрэн бүтэцтэй онцгой тохиолдлуудыг зохицуулах механизмыг хэрэгжүүлдэг бөгөөд Си хэл дээр байхгүй нь найдвартай програм бичихэд илүү хэцүү болгодог загвар механизм - хэлэнд гүн гүнзгий шингэсэн макро үүсгэх нарийн төвөгтэй механизм, кодыг дахин ашиглах өөр замыг нээж, болон бусад олон.

Тиймээс, ерөнхий шугамХэлний хөгжил нь ANSI C-тэй аль болох бүрэн нийцэж байхын зэрэгцээ шинэ өндөр түвшний бүтцийг нэвтрүүлэх замаар түүний чадавхийг өргөжүүлэхэд чиглэгдэж байсан нь мэдээжийн хэрэг хэлний түвшинг нэмэгдүүлэхийн төлөөх тэмцэл хоёр дахь фронт дээр үргэлжилсэн Ангиуд нь зөв хандлагаар доод түвшний үйлдлүүдийг нуух боломжийг олгодог тул програмист санах ой болон системээс хамааралтай объектуудтай шууд ажиллахаа больдог. Гэсэн хэдий ч хэл нь хөгжүүлэгчийг програмыг зөв зохион байгуулахад хүргэдэг механизмыг агуулдаггүй бөгөөд зохиогчид түүний нэлээд боловсронгуй бүтцийг ашиглах талаар системчилсэн зөвлөмж гаргаагүй байна. Тэд мөн хамгийн их тулгардаг өгөгдлийн бүтцийг хэрэгжүүлдэг стандарт ангийн номын санг бий болгох талаар цаг тухайд нь анхаарч үзээгүй.

Энэ бүхэн нь олон хөгжүүлэгчид хэлний семантикийн лабиринтуудыг өөрсдөө судалж, амжилттай ажиллаж буй хэлц үгсийг бие даан олоход хүргэсэн. Жишээлбэл, хэлний хөгжлийн эхний үе шатанд олон ангийн номын санг бүтээгчид Object гэсэн нийтлэг суурь ангитай ангиудын нэг шатлалыг бий болгохыг эрэлхийлсэн. Энэ санааг хамгийн алдартай объект хандалтат хэлнүүдийн нэг болох Smalltalk-аас авсан. Гэсэн хэдий ч C++ дээр энэ нь бүрэн боломжгүй болсон - ангийн номын сангийн нарийн боловсруулсан шатлал нь уян хатан биш болж, ангиудын ажил тодорхойгүй байв. Ангийн номын санг ашиглах боломжтой байхын тулд тэдгээрийг эх кодоор хангах шаардлагатай байв.

Загварын ангиуд бий болсон нь хөгжлийн энэ чиглэлийг бүрэн үгүйсгэв. Өв залгамжлалыг зөвхөн одоо байгаа ангийн тусгай хувилбарыг бий болгох шаардлагатай тохиолдолд л ашиглаж эхэлсэн. Номын сангууд нь тусдаа ангиуд, хоорондоо холбоогүй жижиг шатлалаас бүрдэж эхэлсэн. Гэсэн хэдий ч энэ замд энэ нь буурч эхлэв дахин ашиглахкод, учир нь C++ дээр бие даасан шаталсан ангиудыг полиморф ашиглах боломжгүй юм. Загваруудыг өргөнөөр ашиглах нь эмхэтгэсэн кодын хэмжээ хүлээн зөвшөөрөгдөөгүй нэмэгдэхэд хүргэдэг - загваруудыг макрогенерацийн аргыг ашиглан хэрэгжүүлдэг гэдгийг мартаж болохгүй.

Си синтаксаас өвлөн авсан C++-ийн хамгийн ноцтой дутагдлуудын нэг бол хөрвүүлэгчид тайлбар өгөх боломжтой байдаг. дотоод бүтэцашигласан бүх ангиуд. Үүний үр дүнд номын сангийн ангиудын төлөөллийн дотоод бүтцийг өөрчлөх нь энэ номын санг ашиглаж байгаа бүх программыг дахин эмхэтгэх шаардлагатай болдог. Энэ нь номын сангийн хөгжүүлэгчдийг шинэчлэхэд ихээхэн хязгаарладаг, учир нь гаргах үед шинэ хувилбар, тэдгээр нь өмнөхтэй нийцтэй хоёртын хувилбар хэвээр байх ёстой. Чухам энэ асуудал нь олон мэргэжилтнүүдийг C++ нь том болон маш том төслүүдийг хэрэгжүүлэхэд тохиромжгүй гэж үздэг.

Гэсэн хэдий ч жагсаасан дутагдал, тэр ч байтугай хэлний стандарт байхгүй байсан ч (энэ нь арван таван жилийн дараа юм) нэмэлт жилашиглах!), C++ нь хамгийн алдартай програмчлалын хэлнүүдийн нэг хэвээр байна. Үүний хүч чадал нь үндсэндээ Си хэлтэй бараг бүрэн нийцдэгт оршдог бөгөөд үүний ачаар C++ програмистууд C хэл дээр хийгдсэн бүх хөгжүүлэлтүүдэд хандах боломжтой болсон. Үүний зэрэгцээ C++ нь анги ашиглахгүйгээр хэд хэдэн чухал зүйлийг авчирдаг. нэмэлт функцуудболон олон хүмүүс үүнийг зүгээр л сайжруулсан S болгон ашигладаг тав тухтай байдал.

C++ объектын загварын хувьд таны програм тийм ч том биш (хэдэн зуун мянган мөр) биш л бол энэ нь хэрэглэхэд тохиромжтой. Шинээр гарч ирж байна сүүлийн үедБүрэлдэхүүн хэсэг програм хангамж руу чиглэсэн хандлага нь зөвхөн C++-ийн байр суурийг бэхжүүлдэг. Бие даасан бүрэлдэхүүн хэсгүүдийг боловсруулахад C++-ийн дутагдал хараахан харагдахгүй байгаа бөгөөд бүрэлдэхүүн хэсгүүдийг ажлын системд холбох нь хэлний түвшинд биш, харин үйлдлийн системийн түвшинд хийгддэг.

Хэлсэн бүх зүйлээс харахад C++-ийн хэтийн төлөв тийм ч муу харагдахгүй байна. Хэдийгээр тэр програмчлалын хэлний зах зээл дээр монополь байх болно. Магадгүй бидний баттай хэлж чадах цорын ганц зүйл бол энэ хэл дахин шинэчлэгдэж, өргөжин тэлэхийг даван туулахгүй байх болно. Java гарч ирэхэд түүнд маш их анхаарал хандуулсан нь дэмий хоосон зүйл биш юм. анхааралтай ажигла. Синтаксийн хувьд C++-тэй ойролцоо, тиймээс олон програмистуудад танил мэт санагддаг энэ хэл нь 70-аад оноос уламжлагдан ирсэн C++-ийн хамгийн тод дутагдалтай талуудаас ангижирсан. Гэсэн хэдий ч Java нь зарим хүмүүсийн өгсөн үүрэг даалгаврыг биелүүлэхгүй байх шиг байна.

Орчин үеийн програмчлалд C/C++ хэлнүүдийн онцгой үүрэг нь Интернэтээс тэдгээрээс материал олж болох тодорхой хаягуудыг өгөх нь бараг утгагүй болгодог. Ийм газар маш олон байдаг. Гэсэн хэдий ч, хэрэв та C++-ийн хувьслын талаар илүү ихийг мэдэхийг сонирхож байгаа бол энэхүү богино өгүүллээс эхэл http://citforum.syzran.ru/programming/prg96/76.shtml.

Александр Сергеев, [имэйлээр хамгаалагдсан]
BYTE/Russia сэтгүүлийн нийтлэл, 2000 оны 3-р сар

Тайлбарласан хэлүүдийг практикт ашиглахыг тодорхой харуулахын тулд бид стандарт оролт эсвэл файлаас бүхэл тоонуудын цувралыг оруулж, дараа нь зөвхөн сондгойг нь гаргах шаардлагатай байсан даалгаврыг сонгосон. урвуу дараалалдараах. Энэ бол массив, гогцоо, салаалалт, оролт гаралттай ажиллахыг шаарддаг хамгийн энгийн асуудлуудын нэг бөгөөд үүнийг шийдвэрлэхийн тулд дэд программын дуудлагуудыг харуулах боломжийг олгодог. Үүний зэрэгцээ энэ нь харагдахуйц бөгөөд амархан мэдрэгддэг.

Жагсаалт 1. C

1 #дагах /* I/O функцуудыг холбох */ 2 3 void main(void) 4 ( 5 int M; /* 0-ээс тоолох 10 бүхэл тооны массив */ 6 int N; 7 (N=0; N)<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Бид массивыг урвуугаар нь дамжуулна */ 12 хэрэв (M[N]%2) /* эрэмбэлж сондгойг нь хэвлэнэ */ 13 printf("%d\n", M[N]) ; 14)

  • 3-р мөр. C/C++ хэл дээр программын гүйцэтгэл үргэлж үндсэн функцээс эхэлдэг.
  • 7 ба 11-р мөр.Давталтын толгой хэсэгт эхний тохиргоо, үргэлжилсэн нөхцөл, давталтын параметрийг дахин тооцоолох дүрмийг цэг таслалаар заана. Үйл ажиллагаа ++ Тэгээд -/- - Си хэлний хамгийн алдартай товчлолууд нь хувьсагчийн өсөлт, бууралт, өөрөөр хэлбэл түүний утгыг нэгээр нэмэгдүүлэх, бууруулах гэсэн утгатай.
  • 8-р мөр.Чиг үүрэг scanfэхний параметрт заасан форматын дагуу хаягийг нь үлдсэн параметрүүдээр тодорхойлсон хувьсагчдын утгыг оруулна. Энд утгыг оруулсан хаягийг массивын байршлын хаягийн арифметик ашиглан тооцоолно. Мофсетийг нэмдэг Нэлементүүд. Үүнтэй адил үр нөлөөг бичих замаар олж авах боломжтой &М[N].
  • 12-р мөр.Үйл ажиллагаа % хуваагдлын үлдэгдлийг тооцоолно. Операторын нөхцөл хэрэвилэрхийллийн тоон утга тэгээс өөр байвал гүйцэтгэсэн гэж үзнэ.
  • 13-р мөр.Чиг үүрэг printf- форматаар хэвлэх нь ижил аргаар ажилладаг scanf, гэхдээ хаягуудын оронд утгуудыг дамжуулж гаргана.
1 #дагах 2 3 загвар анги Массив 4 ( 5 нийтийн: Массив (T Хэмжээ=1) : M (шинэ T), N(Хэмжээ), n(0) () 6 Массив (хүчингүй) ( M устгах;) 7 T Count (хүчингүй) const ( return n; ) 8 T оператор (int i) const ( return M[i]; ) 9 void Add (T Data) // Distributed memory address 12 int N, n - ашигласан; 13); 14 15 загвар хүчингүй массив ::Add(T Data) 16 ( хэрвээ (N-n) // Хэрэв бүх хуваарилагдсан 17-г ашигласан бол ( int* P = new T; // зай, (int i=0; i)-д илүү 18-ыг тараана. A; // Хувьсах хэмжээтэй бүхэл тоонуудын массив 28 while (1) // Хязгааргүй давталт 29 ( int N; 30 cin >> N; // cin - стандарт оролтын урсгал 31 if (cin.eof()) завсарлага; // Давтахаас гарах файлын төгсгөлд 32 A.Add(N); // Оруулсан дугаарыг 33 массив руу нэмнэ ) 34 for (int N=A.Count()-1; N>=0; --N) // Walk through массив 35 if ( A[N]%2) 36 cout<, мөн санах ойг суллана
  • 3-13-р мөр.Загварын анги зарлагдлаа Массивпараметртэй Т. Энэ нь төрөл бүрийн объектуудын хувьсах хэмжээтэй массив юм Т. Мэдээжийн хэрэг, бидний даалгаварт загвар анги ашиглах шаардлагагүй. Гэсэн хэдий ч бид C++ нь ямар ч төрлийн элементтэй ажиллах боломжтой полиморф өгөгдлийн бүтцийг хэрхэн бүтээж болохыг харуулахыг хүссэн.
  • 5-р мөр.Анги үүсгэгч. Энэ нь объектын дүрслэлийг эхлүүлдэг. Жишээлбэл, талбай дээр Мүйлдлээр эрэмбэлэгдсэн санах ойн блокийн хаягийг оруулна шинэ Т.
  • 8-р мөр.Үйл ажиллагааны хэт ачааллын жишээ. Чиг үүрэг операторангийн объектын баруун талд дөрвөлжин хаалт гарч ирэх үед дуудагдах болно Массив.
  • 9-р мөр.Энэ функц нь хэрэгжилтийн гол үүрэг юм. Энэ нь массивын элементүүдийг нэмж, шаардлагатай бол өргөтгөнө. Энэ нь бусадтай харьцуулахад илүү төвөгтэй тул түүний тодорхойлолтыг ангийн тодорхойлолтоос авсан болно. Ангийн үндсэн хэсэгт тайлбарласан функцууд нь C++ хэл дээр дуудлагаар биш, харин шугаман орлуулалтаар хэрэгждэг. Энэ нь програмыг хурдасгадаг боловч түүний хэмжээг нэмэгдүүлдэг.
  • 15-24 мөр.Функцийн тодорхойлолт Массив::Нэмэх(T)(Энэ бол түүний бүтэн нэр юм).
  • 27-р мөр.Төрөл бүрийн объект үүсгэх Массив. Загвар Аггаутөрлөөр нь параметрчилсэн int.

Яагаад C++

C++ нь одоогоор арилжааны програм хангамжийн бүтээгдэхүүн боловсруулахад хэрэглэгддэг зонхилох хэл гэж тооцогддог. Сүүлийн жилүүдэд Java шиг програмчлалын хэл дээрх ижил төстэй мэдэгдлүүдийн улмаас энэ давамгайлал бага зэрэг гацсан боловч олон нийтийн санаа бодлын дүүжин эсрэгээрээ эргэлдэж, Java-д зориулсан C++ хэлийг орхисон олон програмистууд саяхан түүний өмнөх хайр руугаа буцсан. Ямар ч байсан хоёр хэл нь маш төстэй тул нэгийг нь сурчихвал нөгөө хэлийнхээ 90 хувийг автоматаар эзэмшдэг.

C# бол Microsoft-оос сүлжээний платформд зориулан бүтээсэн шинэ хэл юм. Үндсэндээ C# нь C++-ийн хувилбар бөгөөд хэд хэдэн үндсэн ялгааг үл харгалзан C# болон C++ хэлүүд нь ойролцоогоор 90% ижил байдаг. C# нь C++-тэй нухацтай өрсөлдөх хүртэл нэлээд хугацаа шаардагдах байх; гэхдээ ийм зүйл тохиолдсон ч С++ хэлний мэдлэг нь ихээхэн давуу тал болно.

C++ бол ерөнхий зориулалтын програмчлалын хэл юм. Үүний байгалийн хэрэглээний талбар нь системийн програмчлал бөгөөд энэ нь үгийн өргөн утгаар ойлгогддог. Нэмж дурдахад C++ нь энэ хүрээнээс хол давсан хэрэглээний олон салбарт амжилттай ашиглагдаж ирсэн. C++-ийн хэрэгжилтийг одоо хамгийн энгийн микрокомпьютерээс эхлээд хамгийн том суперкомпьютер хүртэл бүх машин, бараг бүх үйлдлийн систем дээр ашиглах боломжтой.

С++ хэлний үүсэл хөгжил

Bjarne Stroustrup бол C++ хэлийг бүтээгч бөгөөд анхны орчуулагчийг бүтээгч юм. Тэрээр Муррей Хилл (Нью Жерси, АНУ) дахь AT&T Bell Laboratories судалгааны тооцооллын төвийн ажилтан юм. Дани улсын Аарусын их сургуульд математик, компьютерийн ухааны магистр, Английн Кембрижийн их сургуульд компьютерийн ухааны докторын зэрэг хамгаалсан. Тэрээр тархсан систем, үйлдлийн систем, загварчлал, програмчлалын чиглэлээр мэргэшсэн. M. A. Ellis-ийн хамт тэрээр C++ хэлний тодорхой гарын авлага болох The Annotated C++ Manual-ийн зохиогч юм.

Мэдээжийн хэрэг, C++ нь түүний дэд хэсэг болон үлдсэн Си хэлэнд маш их өртэй. Системийн програмчлалын хамгийн тулгамдсан асуудлыг шийдвэрлэхэд зориулагдсан бүх доод түвшний C хэрэгслүүд хадгалагдан үлджээ. C нь эргээд өмнөх BCPL хэлэндээ маш их өртэй. C++ хэл дээр BCPL хэлний тайлбарыг сэргээсэн. Урам зориг өгөх өөр нэг эх сурвалж нь SIMULA-67 хэл байсан; Үүнээс ангиллын тухай ойлголт (үүсмэл анги, виртуал функцүүдийн хамт) зээлсэн байв. C++-ийн операторуудыг хэт ачаалах чадвар, оператор хаана ч тохиолдсон мэдэгдэл хийх эрх чөлөө нь ALGOL-68 хэлийг санагдуулдаг.

1980 оноос эхлэн "C with classes" гэж нэрлэгддэг хэлний өмнөх хувилбаруудыг ашиглаж эхэлсэн. Зохиогч нь тасалдалд суурилсан симуляцийн программ бичих шаардлагатай болсон тул энэ хэл үүссэн. SIMULA-67 хэл нь үр ашигтай байхаас гадна үүнд тохиромжтой. Томоохон загварчлалын асуудлуудад ангиудтай Си хэлийг ашигласан. Тухайн үед үүн дээр цаг хугацаа, санах ойн нөөц чухал байсан програм бичих боломжууд хатуу шалгалтанд хамрагдсан. Хэл нь операторын хэт ачаалал, лавлагаа, виртуал функцууд болон бусад олон функцууд дутагдалтай байв. C++ анх 1983 оны 7-р сард зохиогчийн судалгааны бүлгээс гадуур гарсан боловч C++-ийн олон шинж чанарууд хараахан боловсруулагдаагүй байсан.

C++ (C plus plus) нэрийг 1983 оны зун Рик Масчитти зохиосон. Энэ нэр нь Си хэлний өөрчлөлтийн хувьслын шинж чанарыг илэрхийлдэг. ++ гэсэн тэмдэглэгээ нь C хэлний өсөн нэмэгдэж буй үйл ажиллагааг илэрхийлдэг синтаксийн алдаа юм. Дээрээс нь огт өөр хэлний нэрээр аль хэдийн хэрэглэгдэж эхэлсэн. Си семантикийг мэддэг хүмүүст C++ нь ++C-ээс муу гэж үздэг. Энэ хэл нь Си хэлний өргөтгөл бөгөөд С хэлний онцлогийг арилгах замаар аливаа асуудлыг шийдэхийг оролддоггүй тул D гэж нэрлээгүй. C++ нэрний өөр нэг сонирхолтой тайлбарыг хавсралтаас олж болно.

Зохиолч болон түүний найзууд ассемблер хэл, Си болон бусад орчин үеийн өндөр түвшний хэлээр программчлах шаардлагагүй байх үүднээс C++-ийг анх санаачилсан юм. Үүний гол зорилго нь програмчлалын үйл явцыг хөнгөвчлөх, хувь хүн програмистад илүү тааламжтай болгох явдал юм. Саяхан болтол цаасан дээр C++ хөгжүүлэх төлөвлөгөө байгаагүй. Зураг төсөл боловсруулах, хэрэгжүүлэх, баримтжуулах ажил зэрэг явагдсан. "С++ төсөл" эсвэл "С++ хөгжлийн хороо" гэж хэзээ ч байгаагүй. Тиймээс энэ хэл нь хэрэглэгчдэд тулгардаг бүх бэрхшээлийг даван туулахаар хувьсан өөрчлөгдөж, хөгжиж байна. Зохиогчийн бүх асуудлын талаар найз нөхөд, хамтран ажиллагсадтайгаа ярилцах нь хөгжилд түлхэц болдог.

Энэ номын анхны хэвлэлийг хэвлүүлснээс хойш С++ хэлэнд ихээхэн өөрчлөлт, сайжруулалт хийгдсэн. Энэ нь голчлон хэт ачаалал, холбох, санах ойн менежментийн тодорхой бус байдлын шийдэлтэй холбоотой юм. Гэсэн хэдий ч C хэлтэй нийцтэй байдлыг нэмэгдүүлэхийн тулд бага зэргийн өөрчлөлтүүд хийгдсэн бөгөөд олон удамшил, статик болон const үзүүлэлт бүхий гишүүн функцууд, хамгаалагдсан гишүүд, төрлийн загварууд, онцгой нөхцөл байдлыг зохицуулах зэрэг зарим ерөнхий ойлголтууд болон чухал өргөтгөлүүдийг нэвтрүүлсэн. Эдгээр бүх өргөтгөл, сайжруулалтууд нь C++ хэлийг номын сан үүсгэж, ашиглах боломжтой хэл болгоход чиглэгдсэн. Бүх өөрчлөлтийг -д тайлбарласан болно.

1985-1991 оны хооронд нэвтрүүлсэн бусад өргөтгөлүүд (олон өв залгамжлал, статик гишүүн функц, цэвэр виртуал функц гэх мэт) нь бусад хэлээс илүүтэй C++ програмчлалын туршлагыг нэгтгэн дүгнэснээс үүссэн.

Эдгээр зургаан жилийн хугацаанд хийсэн хэлний өргөтгөлүүд нь үндсэндээ C++ хэлийг өгөгдлийн хийсвэрлэх, объект хандалтат програмчлалын хэл, ялангуяа хэрэглэгчийн тодорхойлсон өгөгдлийн төрлүүд бүхий өндөр чанартай номын сан үүсгэх хэрэгсэл болгон илэрхийлэх чадварыг нэмэгдүүлэхэд чиглэгдсэн.

Ойролцоогоор 1987 онд C++ стандартчиллын ажил удахгүй болох нь тодорхой болсон бөгөөд үүнтэй холбоотой ажил нэн даруй эхлэх ёстой.

AT&T Bell Laboratories энэ ажилд томоохон хувь нэмэр оруулсан. 20 орчим байгууллагын 100 орчим төлөөлөгч лавлах гарын авлагын орчин үеийн хувилбар болон ANSI стандартчиллын эх материал болсон зүйлийг хянаж, санал бодлоо илэрхийлэв. C++. Эцэст нь Hewlett-Packard-ийн санаачилгаар 1989 оны 12-р сард ANSI-д X3J16 хороо байгуулагдав. C++-д зориулсан ANSI (Америкийн Стандарт) стандартчиллын ажил нь ISO (Олон улсын Стандартчиллын Байгууллагын) стандартчиллын ажлын нэг хэсэг болох төлөвтэй байна.

С++ нь зарим үндсэн ангиудыг хөгжүүлэхтэй зэрэгцэн хөгжсөн.

Сонирхсон C хичээлээ сонго:

Си бол 1972 онд Деннис М.Ричигийн бүтээсэн програмчлалын хэл юм. Тухайн үеийн хэлний стандартыг Ричигийн Брайан Кернигантай (The C Programming Language) хамтран бичсэн номонд харуулсан. Энэ стандартыг K&R стандарт гэж нэрлэдэг (Керниган, Ричигийн нэрээр). K&R-C дүрмийг ашиглан бичсэн аливаа програмыг ямар ч C хөрвүүлэгч амжилттай эмхэтгэх болно.

Си хэлний хөрвүүлэгч боловсруулж буй програмистууд хэлийг орчин үеийн болгож, хөгжүүлж эхэлсэн. Төөрөгдөл гаргахгүйн тулд Америкийн үндэсний стандартын хүрээлэн 1983 онд ANSI хэлний стандартыг боловсруулсан. Өнөөдрийг хүртэл ANSI-C нь Си хэлний өөрчлөлт, хөгжлийн дүрмийг тогтоодог.

Си бол эмхэтгэсэн програмчлалын хэл юм. Программ нь компьютерийн техник хэрэгслээр гүйцэтгэхийн тулд хоёртын код руу хөрвүүлэх ёстой заавар, функцуудаас бүрддэг.
C нь одоогийн байдлаар нэлээд алдартай бөгөөд энэ нь хурд, зөөвөрлөх чадвар, бүтэц гэх мэт эрэлт хэрэгцээтэй байгаатай холбоотой юм.

  • Хурд

Бүх дээд түвшний хэлнүүдийн дотроос Си хэл нь ассемблер хэлтэй илүү ойр програмчлалын хэл юм. Тиймээс олон хэлний заавар нь компьютерийн техник хангамжид шууд ханддаг тул програм маш хурдан ажилладаг. Ийм учраас C хэлийг үйлдлийн систем болон хөрвүүлэгч бичихэд ашиглаж болно.

Ихэнх хөгжүүлсэн C хөрвүүлэгчид өндөр оновчтой кодуудыг үүсгэдэг, i.e. өөрөөр хэлбэл, жижиг хэмжээтэй (хөрвүүлэгчийн үүсгэсэн код бага байх тусам илүү оновчтой болно).

  • Зөөврийн чадвар

Зарчмын хувьд хурдан ажилладаг программуудыг ассемблер хэлээр бичих нь утга учиртай. Гэхдээ мнемоник угсралтын кодууд нь микропроцессорын гэр бүлд тохирсон байдаг тул бид тэдгээрийг платформ бүрт бичих хэрэгтэй болно.

C нь стандарт түлхүүр үгсийн багцыг ашигладаг. Тэдгээр. Програмыг ямар ч платформ, ямар ч үйлдлийн системтэй компьютерт зориулж нэг удаа бичдэг. Гэхдээ хэлний хувьд хоёр төрлийн хөрвүүлэгч байдаг: нэг нь IBM, нөгөө нь Apple-д зориулагдсан. Гэхдээ програмын текст өөрөө нэг удаа, бүрмөсөн үүсдэг.

  • Бүтэц зохион байгуулалт

Си хэл дээр бичигдсэн программууд нь өөрийн гэсэн бүтэц, дүрэм журамтай байдаг нь програмистыг логикоор сэтгэхэд түлхэц болдог.
Програмыг зохион байгуулах хэрэгцээ нь зөвхөн "нэмэх" зүйл бөгөөд үүний ачаар Си програмыг зохиох, засварлах, дибаг хийхэд маш хялбар байдаг.

  • Функцийн сангууд

Си хэл нь анх синтаксдаа цөөн тооны үйлдлийг агуулсан програмчлалын хэл юм. Жишээлбэл, хэлэнд мэдээлэл оруулах, гаргахад зориулагдсан операторууд, мөртэй ажиллах операторууд байдаггүй.

Си хэлний бүх боломжуудыг функцын сангуудаар хангадаг бөгөөд тэдгээрийн зарим нь хөрвүүлэгчтэй хамт ирдэг. Номын сан нь хөрвүүлэгчид хавсаргасан тусдаа файл бөгөөд тодорхой асуудлыг шийдвэрлэх функцуудыг агуулдаг.



Танд нийтлэл таалагдсан уу? Найзуудтайгаа хуваалцаарай!