C++

සී ප්ලස් ප්ලස් (C++)
C++ ප්‍රමිතිකරණ කමිටුව මගින් අනුමත ලාංජනය
පැරඩයිමබහු-පැරඩයිම: පටිපාටිගත, විධානාත්මක, ශ්‍රිතමය, වස්තු-නැඹුරු, පොදු, මොඩියුල
පවුලC
සැලසුම් කළේබ්‍යාර්න ස්ට්‍රෞස්ට්‍රප්
සංවර්ධකයාISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 21 (Working Group 21)
පළමුව ප්‍රකාශය1985; වසර 38 කට පෙර (1985)
ස්ථායි නිකුතුව
C++20 (ISO/IEC 14882:2020) / 15 දෙසැම්බර් 2020; වසර 2 කට පෙර (2020-12-15)
පූර්ව දර්ශන නිකුතුව
C++23 / 17 මාර්තු 2022; මාස 19 කට පෙර (2022-03-17)
ප්‍රරූප නීතියStatic, nominative, partially inferred
OSCross-platform
ගොනු දිගුව.C, .cc, .cpp, .cxx, .c++, .h, .H, .hh, .hpp, .hxx, .h++
වෙබ් අඩවියisocpp.org/
ප්‍රධාන ක්‍රියාත්මක කිරීම
ආභාෂය ලද්දේ
Ada, ALGOL 68,[1] BCPL,[2] C, CLU,[1] ML, Mesa,[1] Modula-2,[1] Simula, Smalltalk[1]
බලපෑම් කළේ
Ada 95, C#,[3] C99, Chapel,[4] Clojure,[5] D, Java,[6] JS++,[7] Lua, Nim,[8] Objective-C++, Perl, PHP, Python,[9] Rust, Seed7

C++ (/ˌsˌplʌsˈplʌs/ යනු ඩෙන්මාර්ක ජාතික පරිගණක විද්‍යාඥ බ්‍යාර්න ස්ට්‍රෞස්ට්‍රප් විසින් C ක්‍රමලේඛන භාෂාවට දිගුවක් ලෙස නිපදවන ලද පොදු-කාර්යය ක්‍රමලේඛන භාෂාවකි, වර්ග සහිත "C" ලෙසද මෙය හැඳින්වේ. කාලයත් සමග භාෂාව සැලකිය යුතු ලෙස පුළුල් වී ඇත, නූතන C++ වල වස්තු-නැඹුරු, පොදු, සහ ශ්‍රිතමය ලක්ෂණ ද, ඊට අමතරව පහළ-මට්ටමේ මතක පරිහරණයට අවශ්‍ය පහසුකම් ද ඇත. එය සෑම විටම සම්පාදිත භාෂාවක් ලෙස ක්‍රියාත්මක කෙරේ, එම C++ සම්පාදක සපයන බොහෝ ආයතන අතරට නිදහස් මෘදුකාංග පදනම, LLVM, මයික්‍රොසොෆ්ට්, ඉන්ටෙල්, Embarcadero, ඔරකල්, සහ IBM අයත් වේ, එම නිසා එය බොහෝ පද්ධතිවලදී භාවිතා කළ හැක.[10]

ඉතිහාසය

en:Bjarne Stroustrup, C++ නිර්මාතෘ

බිහානෙ ස්ටෘස්ට්‍රප් නම් ඩෙන්මාක් හා බ්‍රිතාන්‍ය සම්භවයක් ඇති පරිගණක විද්‍යාඥයා "සරණි සහිත C" ("C with Classes") භාෂාව සෑදීම 1979දී ආරම්භ කරන ලදී. ඔහුට මෙම කාර්යය කිරීමට තුඩු දුන් හේතූන් අතර විශාල වැඩසටහන් නිර්මානකරණයට හොඳ ධාවන වේගයක් සහිත ක්‍රමලේඛන භාෂාවක් එවකට නොමැති වීම ප්‍රධාන විය. ස්ටෘස්ට්‍රප් en:AT&T Bell Labs හී සේවය කරන සමයේ C සදහා Stimula භාෂාවේ තිබූ විශේෂ ලක්‍ෂණ එකතු කිරීම ඇරඹිණි. 1983 දී ප්‍රථම C++ වාණිජ නිකුතුව එළි දැක්විණි. පසුව 1985 දී ස්ටෘස්ට්‍රප් විසින් රචිත C++ හී නිල ග්‍රන්ථය en:The C++ Programming Language එළි දැක්විණි.

නිරුක්තිය

C++ නිර්මාතෘට අනූව, C++ නාමය C වල නව වෙළුමක් බව හොවා දක්වයි. C++ යනු C භාෂාවේ C නම් විචල්‍යයේ අගය 1කින් වැඩි කිරීමට යොදන විදානයයි.[11] මුලින් C++ හදුන්වන ලද්දේ "new C", "C with classes" ආදී නම් වලිනි, අවසාන නම් ලබාදෙන ලද්දේ 1983 දී රික් මැසිටි(en:Rick Mascitti) විසිනි.

සම්මතකරනය

වසර C++ සම්මතය විව්‍යහාර නාමය
1998 ISO/IEC 14882:1998[12] C++98
2003 ISO/IEC 14882:2003[13] C++03
2007 ISO/IEC TR 19768:2007[14] C++TR1
2011 ISO/IEC 14882:2011[15] C++11
2014 ISO/IEC 14882:2014 C++14

නවතම සම්මතය වන්නේ C++14 ය.

ප්‍රතිපත්තීන්

C++ සකස් කර ඇත්තේ මූලුක ප්‍රතිපත්ති සමූයකට එකඟ වෙමිනි, මේවා en:The Design and Evolution of C++ (1994) යන පොතෙහි බිහානෙ ස්ටෘස්ට්‍රප් විස්තර කර ඇත.

  • en:statically typed, C මෙන්ම විවිධ පද්ධතීන් වලට පහසුවෙන් පරිවර්තනය(port) කළ හැකිවීම.
  • විවිධ ක්‍රමලේඛන ආකාර වලට සහාය දැක්වීම(en:procedural programming, en:data abstraction, en:object-oriented programming, en:generic programming).
  • කේතනකරුට අවශ්‍යය උපරිම තෝරාගැනීමේ හැකියාව ලබා දීම(ඔහු හෝ ඇය වැරදි තෝරාගැනීම් සිදු කලද).
  • C භාෂාව C++ වලම උප කුලකයක් වීම(හැකිතාක් දුරට).
  • සෑම පද්ධතියකටම පොදු හැකියාවන් පමණක් භාෂාවට එකතු කිරීම.
  • භාවිත නොකරන දේවල් වලට සම්පත් භාවිතා නොකිරීම(overhead)


සම්මත එකතුව(Standard library)

C++ සම්මත එකතුව, C සම්මත එකතුව හා STL(සම්මත අච්චු එකතුව) යන දෙකෙන් සෑදී ඇත. මෙයින් භාෂාව පරිශීලනය කරන්නන්ට සම්මතයකට අනූව කෙරෙන දෑ නැවත නැවතත් තමන් විසින් ම කේතනය නොකර සම්මතයේ ඇති සම්මත ඉදිකිරීම(Implementation) භාවිත කිරීමේ අවස්ථාව සැලසේ.

STL(සම්මත අච්චු එකතුව) මුල්වරට සාදන ලද්දේ HP ආයතනය විසිනි පසුව එය SGI මහින් වෙනස්කම් වලට භාජනය කෙරිනි. මෙම අච්චු වල විශේෂත්වය වන්නේ පොදු ඇල්ගොරිදම(en:Generic Algorithms) හා පොදු දත්ත ආකෘති නිර්මාණය කළ හැකිවීමයි. උදාහරණ වශයෙන් එකම කේතය භාවිතයෙන් පූර්ණ සංඛ්‍යා දෙකක් හා දශම සංඛ්‍යා දෙකක් එකතු කරගත හැක(බහුරූපීයතාවයේ මේ දෙකට වෙන වෙනම කේත ලිවිය යුතු වේ). මෙය සිදුවන්නේ සංග්‍රහ කාලයේ(Compile time) දී නිසා ධාවන කාලයේ දී ධාවන ප්‍රමාදයන් සිදු නොවේ.

භාෂාව

C++ හී වැඩිපුර දක්නට ලැබෙන්නේ C භාෂාවේ කාරක රීතීන්ය(syntax). පහත දැක්වෙන්නේ C++ නිර්මාතෘගේ "Hello World" වැඩසටහනයි. මෙය C++ හී සියලු සම්මතයන්ට අනූව නිවැරදි වැඩසටහනකි. යම් ශ්‍රිතයක ඵල වර්ගය(return type) void ගණයට අයිති නොවේ නම් ශ්‍රිතය අවසාන විය යුත්තේ return හා යෙදී ඇති ඵලයකිනි(උදාහරණ වශයෙන්, return 1;). එහෙත් C++ වලදී main ශ්‍රිතය පහත ආකාර වීම නිවැරදිය(මෙහිදී return 0; උපකල්පනය කෙරේ).

# include <iostream>

int main()
{
   std::cout << "Hello, world!\n";
}

අතිබැර(Overload) කිරීම

ඇතිබැර කිරීමට නොහැකි කාරක
Operator Symbol
Scope resolution operator ::
Conditional operator ?:
dot operator .
Member selection operator .*
"sizeof" operator sizeof
"typeid" operator typeid

C++ කාරක 35කට වැඩි සංඛ්‍යාවක් ලබාදේ, මේවා මූලික අංක ගණිතය, බිට වෙනස් කිරීම්, සංසන්දනය කිරීම්, තාර්කික කාරක හා වෙනත් ගණයන්ට අයිති වේ. වගුවේ දක්වා ඇති කාරක හැර වෙනත් සියලු ම කාරක අතිබැර කළ හැකිය. නව වස්තූන් සදහා විවිධ කාරක යොදා ගැනීමෙන් සිදුවන වෙනස්කම් භාවිතයට පහසු ආකාරයට සකස් කිරීමට කාරක අතිබැර කිරීමෙන් හැකි වේ.

මතක ගබඩා කළමණාකරනය

මේ සදහා ක්‍රම 4ක් පවතී

  • ස්ථිතික - ධාවනය නොවන කෙතයේ ඇති මතක වෙන්කිරීම්(main ශ්‍රිතයෙන් පිට(global variable) වැනි).
  • ස්වයංක්‍රීය - Stack හි මතකය වෙන්කර ගැනීම, මෙය ධාවනය වන කේතයක් තුළින්(codepath) විචල්‍යයක් අර්ථ දැක්ව්මේදී(variable definition) සිදුවේ.
  • ගතික - Heap හි මතකය වෙන්කර ගැනීම, new හා delete භාවිතයෙන් කළ හැක(C වල භාවිත වූ ආකාරය එනම් malloc හා free ද භාවිත කළ හැක).
  • Garbage collected - මේ සදහා C++ වලට පරිබාහිර library එකක් භාවිත කිරීමට සිදුවේ. en:Boehm garbage collector සාමාන්‍යයෙන් භාවිත වේ.

අච්චු(Templates)

C++ හී අච්චු මගින් පොදු ක්‍රමලේඛනය හදුන්වාදෙයි, අච්චුවක් සෑදූවිට එය C++ කේතයක් ලිවීමට භාවිත වේ. මෙම කේතය ලියැවෙන්නේ සංග්‍රහ කාලයෙහිය එම නිසා ධාවිත කාලයේ දී ප්‍රමාදයන්ට ලක් නොවේ. අච්චූන් මඟින් අඩු කාලයක දී ධාවනය වන කේත අඩු කාලයක් වැයකිරීමෙන් සාදාගත හැක. C හී දක්නට ලැබෙන macro වැඩි දියුණු කිරීමෙන් C++ අච්චු සෑදී ඇත, මේවාට සාමාන්‍ය ආදේයකට වඩා යමක් කළ කැක. අච්චු ස්ථික බහුරූපියතාව ලබාදේ.

වස්තූන්(Objects)

C++ වස්තු පාදක ක්‍රමලේඛනය C භාෂාවට හදුන්වාදේ. වස්තුපාදක ක්‍රමලේඛනයේ ප්‍රධාන ලක්‍ෂණ 4 වන නිබන්ධය(Abstraction), සංක්‍ෂිප්තකරනය(Encapsulation), උරුමකරනය(Inheritance) හා බහුරූපියතාව(Polymorphism) සදහා C++ සහය දක්වන අතර සම්පත් තම භාරයට ගන්නා යම් වස්තුවක් සම්පත් වෙන් කරගැනීම වස්තුව ඉපැදූ විගස ලබාගැනීම හා මියයන විට එය නැවත පද්ධතියට භාර දීම(Resource Acquisition Is Initialization) යන විශේෂ වස්තුපාදක ලක්‍ෂණයටද C++ සහය දක්වයි.

සංක්‍ෂිප්තකරනය(Encapsulation)

C++ හී ආකාර 3කින් සංක්‍ෂිප්තකරනය කළ හැක,

  • private පෞද්ගලික, එනම් භාවිතා වන සරණියේ(class) පමණක්.
  • protected ආරක්‍ෂිත, උරුම වූ සරණි වල පමණක්.
  • public පොදු, ඕනෑම ස්ථානයක.

උරුමකරනය(Inheritance)

C++ හී සාමාන්‍ය උරුමකරනය මෙන් බහුඋරුමකරනය ද භාවිත කළ හැක. බහුඋරුමකරනයේදී මව හා පියා එක්ව සැදෙන දරුවා හට මව, පියා දෙදෙනාගේම ලක්‍ෂණ ලබාදීමට හැකිවේ.

බහුරූපතාව(Polymorphism)

බහුරූපතාව පොදු මුහුණතක් හරහා විවිධ වූ ගොඩනැගීම් වලට ඉඩ සලසා දේ.

ස්ථිතික(Static)

ශ්‍රිත අතිබැර(en:Function overloading) කිරීම හා අච්චු(templates) භාවිතය ස්ථිතික බහුරූපතාවට නිදසුන්ය. මේවා සංග්‍රහ කාලයේ දී සිදවේ. ශ්‍රිත අතිබැර කිරීමේ දී එක් ශ්‍රිතයකට වෙනස් පරාමිති ලැයිස්තු හෝ පෙරනිමි පරාමිති තිබිය යුතු වේ. ශ්‍රිත අත්සන(function signature) එකිනෙකට වෙනස් ශ්‍රිත පමණනක් අතිබැර කළ හැක.

ගතික(Dynamic)

උරමකරනය

ධාවන කාලයේ දී විචල්‍ය යොමු හරහා(references) හෝ දර්ශක හරකා(pointers) යම් මූලික සරණියකින්(base class) සෑදුන වස්තුවක උරුමවූ සරණියේ හෝ මූලික සරණියේ ඇති සාමාජිකයින් වෙත ප්‍රවේශ විය හැක(උදාහරණ ලෙස, මූලික සරණියේ ගණය(base type) භාවිතා වූ විට මූලික සරණියේ සාමාජිකයන් වෙත ප්‍රවේශය ලැබේ).

අතථ්‍ය සාමාජික ශ්‍රිත(Virtual member functions)

මෙයද උරුමකරනයේ දී දක්නට ලැබේ. යම් සරණියක් උරුම වන විට එහි ඇති යම් ශ්‍රිතයක පරාමිති ලැයිස්තුවට සමාන ලැයිස්තුවක් ඇති තවත් ශ්‍රිතයක් උරුමකරනය වූ සරණියේ ඇත් නම්, මූලික සරණියේ තිබූ ශ්‍රිතය ප්‍රතික්‍ෂේප වේ, මෙය සිදුවන්නේ ද ධාවන කාලයේ දීය. ශුද්ධ අතථ්‍ය සාමාජික ශ්‍රිත යනු මූලික සරණියේ එම ශ්‍රිතයට අදාළ අර්ථ දැක්වීමක්(function definition) නොමැති විට හා එම ප්‍රකාශයේ(function declaration) =0 අගට යෙදී තිබෙන විට සිදුවන ප්‍රතික්ක්‍ෂේප කිරීමයි.

අමතර කියවීම්

Portal icon පරිගණක ක්‍රමලේඛනය ද්වාරය
  • The C++ Programming Language
  • Comparison of integrated development environments for C/C++
  • Comparison of programming languages
  • List of C++ compilers
  • List of C++ template libraries
  • Comparison of Java and C++
  • C++ Standard Library

යොමුව

  1. 1.0 1.1 1.2 1.3 1.4 Stroustrup, Bjarne (1996). "A history of C++: 1979-1991". A history of C++: 1979-1991. ACM. pp. 699–769. doi:10.1145/234286.1057836. 
  2. Stroustrup, Bjarne (16 දෙසැම්බර් 2021). "C++20: Reaching for the Aims of C++ - Bjarne Stroustrup - CppCon 2021". CppCon.
  3. Naugler, David (මැයි 2007). "C# 2.0 for C++ and Java programmer: conference workshop". Journal of Computing Sciences in Colleges. 22 (5). Although C# has been strongly influenced by Java it has also been strongly influenced by C++ and is best viewed as a descendant of both C++ and Java.
  4. "Chapel spec (Acknowledgements)" (PDF). Cray Inc. 1 ඔක්තෝබර් 2015. Archived (PDF) from the original on 24 ජූනි 2018. සම්ප්‍රවේශය 14 ජනවාරි 2016.
  5. "Rich Hickey Q&A by Michael Fogus". 11 ජනවාරි 2017 දින මුල් පිටපත වෙතින් සංරක්ෂණය කරන ලදී. සම්ප්‍රවේශය 11 ජනවාරි 2017.
  6. Harry. H. Chaudhary (28 ජූලි 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". Archived from the original on 27 මැයි 2021. සම්ප්‍රවේශය 29 මැයි 2016.
  7. Roger Poon (1 මැයි 2017). "Scaling JS++: Abstraction, Performance, and Readability". Archived from the original on 11 මැයි 2020. සම්ප්‍රවේශය 21 අප්‍රේල් 2020.
  8. "FAQ Nim Programming Language". Archived from the original on 11 ජූලි 2017. සම්ප්‍රවේශය 21 අප්‍රේල් 2020.
  9. "9. Classes — Python 3.6.4 documentation". docs.python.org. Archived from the original on 23 ඔක්තෝබර් 2012. සම්ප්‍රවේශය 9 ජනවාරි 2018.
  10. ස්ට්‍රෞස්ට්‍රප්, බ්‍යාර්න (1997). "1". ද C++ ප්‍රෝග්‍රමින්ග් ලැන්ග්වේජ් (තුන්වන ed.). ISBN 0-201-88954-4. OCLC 59193992.
  11. "Bjarne Stroustrup's FAQ – Where did the name "C++" come from?". සම්ප්‍රවේශය 16 ජනවාරි 2008.
  12. "ISO/IEC 14882:1998".
  13. "ISO/IEC 14882:2003".
  14. "ISO/IEC TR 19768:2007".
  15. "ISO/IEC 14882:2011".

අමතර කියවීම්

  • Abrahams, David; Gurtovoy, Aleksey. C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond. Addison-Wesley. ISBN 0-321-22725-5.
  • Alexandrescu, Andrei (2001). Modern C++ Design: Generic Programming and Design Patterns Applied. Addison-Wesley. ISBN 0-201-70431-5.
  • Alexandrescu, Andrei; Sutter, Herb (2004). C++ Design and Coding Standards: Rules and Guidelines for Writing Programs. Addison-Wesley. ISBN 0-321-11358-6.
  • Becker, Pete (2006). The C++ Standard Library Extensions : A Tutorial and Reference. Addison-Wesley. ISBN 0-321-41299-0.
  • Coplien, James O. (1992, reprinted with corrections 1994). Advanced C++: Programming Styles and Idioms. ISBN 0-201-54855-0. {cite book}: Check date values in: |year= (help)
  • Dewhurst, Stephen C. (2005). C++ Common Knowledge: Essential Intermediate Programming. Addison-Wesley. ISBN 0-321-32192-8.
  • Information Technology Industry Council (15 ඔක්තෝබර් 2003). Programming languages – C++ (Second ed.). Geneva: ISO/IEC. 14882:2003(E).
  • Josuttis, Nicolai M. (2012). The C++ Standard Library, A Tutorial and Reference (Second ed.). Addison-Wesley. ISBN 0-321-62321-5.
  • Koenig, Andrew; Moo, Barbara E. (2000). Accelerated C++ – Practical Programming by Example. Addison-Wesley. ISBN 0-201-70353-X.
  • Lippman, Stanley B.; Lajoie, Josée; Moo, Barbara E. (2011). C++ Primer (Fifth ed.). Addison-Wesley. ISBN 0-470-93244-9.
  • Lippman, Stanley B. (1996). Inside the C++ Object Model. Addison-Wesley. ISBN 0-201-83454-5.
  • Meyers, Scott (2005). Effective C++ (Third ed.). Addison-Wesley. ISBN 0-321-33487-6.
  • Stroustrup, Bjarne (2013). The C++ Programming Language (Fourth ed.). Addison-Wesley. ISBN 978-0-321-56384-2.
  • Stroustrup, Bjarne (1994). The Design and Evolution of C++. Addison-Wesley. ISBN 0-201-54330-3.
  • Stroustrup, Bjarne (2014). Programming Principles and Practice Using C++ (Second ed.). Addison-Wesley. ISBN 978-0-321-99278-9.
  • Sutter, Herb (2001). More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley. ISBN 0-201-70434-X.
  • Vandevoorde, David; Josuttis, Nicolai M. (2003). C++ Templates: The complete Guide. Addison-Wesley. ISBN 0-201-73484-2.


External links

සැකිල්ල:CProLang