C++

විකිපීඩියා, නිදහස් විශ්වකෝෂය වෙතින්
වෙත පනින්න: සංචලනය, සොයන්න
සී ප්ලස් ප්ලස්(C++)
en:File:C plus plus book.jpg
Paradigm Multi-paradigm:[1] procedural, functional, object-oriented, generic
ප්‍රාදුර්භූත වෙන්නේ 1983
නිර්මාණය කරන ලද්දේ බිහානෙ ස්ටෘස්ට්‍රප් (Bjarne Stroustrup)
විකාශකය


ස්ථාවර නිකුතුව ISO/IEC 14882:2011 (2011)
Typing discipline Static, unsafe, nominative
ප්‍රධාන ක්‍රියාත්මක කිරීම් C++ Builder, clang, en:Comeau C/C++, GCC, Intel C++ Compiler, Microsoft Visual C++, Sun Studio
Dialects en:Embedded C++, en:Managed C++, en:C++/CLI, en:C++/CX
අනුබලය en:Perl, LPC, Lua, Pike, Ada 95, Java, en:PHP, D, en:C99, C#,[2] Falcon, en:Seed7
OS බහු පද්ධ්තිCross-platform (multi-platform)
සාමාන්‍ය ගොනු විස්තීර්ණ .h .hh .hpp .hxx .h++ .cc .cpp .cxx .c++
Website News, status & discussion about Standard C++
Wikibooks logo C++ Programming at Wikibooks

C++ (කියැවීම: සී ප්ලස් ප්ලස්) යනු C (පරිඝනක භාෂාව) හී වස්තු පාදක(en:object oriented) වෙළුමයි. C++ හී නිර්මාණකරු වන්නේ බිහානෙ ස්ටෘස්ට්‍රප් (en:Bjarne Stroustrup) ය. මුල් අවදියේ දී C++, C with Classes නමින් හැදින් වුවද 1983 දී C++ ලෙස නම් කරන ලදී. C++ ජනප්‍රිය ක්‍රමලේඛන භාෂා අතර ප්‍රධාන තැනක් ගනී[3][4]. C මෙන්ම C++ ද සම්පාදනය කරන්නේ සහජ(native) ගොනුය. මේ නිසා C++ වේගවත් ව ක්‍රියාත්මක වන ගොනු සෑදීමට බහුල වශයෙන් යොදාගනී.

C++ දෘඩාංග නිර්මාණකරනයේද(en:hardware design) භාවිතා වේ. මූලික සැලසුම් C++ භාවිතයෙන් ලියා පසුව දෘඩාංග විස්තර කිරීමේ භාෂාවකට පරිවර්තනය කරනු ලැබේ[5].

ඉතිහාසය[සංස්කරණය]

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කින් වැඩි කිරීමට යොදන විදානයයි.[6] මුලින් C++ හදුන්වන ලද්දේ "new C", "C with classes" ආදී නම් වලිනි, අවසාන නම් ලබාදෙන ලද්දේ 1983 දී රික් මැසිටි(en:Rick Mascitti) විසිනි.

සම්මතකරනය[සංස්කරණය]

වසර C++ සම්මතය විව්‍යහාර නාමය
1998 ISO/IEC 14882:1998[7] C++98
2003 ISO/IEC 14882:2003[8] C++03
2007 ISO/IEC TR 19768:2007[9] C++TR1
2011 ISO/IEC 14882:2011[10] C++11

නවතම සම්මතය වන්නේ C++11 ය මෙය C++0x ලෙසද හැදින්වේ. මෙය 2011 අගෝස්තු 12 වන දින අනුමත කරන ලදී[11].

ප්‍රතිපත්තීන්[සංස්කරණය]

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 අගට යෙදී තිබෙන විට සිදුවන ප්‍රතික්ක්‍ෂේප කිරීමයි.

අමතර කියවීම්[සංස්කරණය]

යොමුව[සංස්කරණය]

  1. Stroustrup, Bjarne (1997). "1". The C++ Programming Language (Third සංස්.). ISBN 0-201-88954-4. OCLC 59193992. 
  2. Naugler, David (May 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.". 
  3. "Programming Language Popularity". 2009. http://www.langpop.com/. සම්ප්‍රවේශය කෙරුණු දිනය 16 January 2009. 
  4. "TIOBE Programming Community Index". 2009. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html. සම්ප්‍රවේශය කෙරුණු දිනය 3 August 2011. 
  5. "What's CvSDL?". http://www.cvsdl.com/: cvsdl. http://www.cvsdl.com/. සම්ප්‍රවේශය කෙරුණු දිනය 8 March 2010. "CvSDL was introduced in 2003 as a C++ class framework with Verilog features that worked like a Verilog simulator. Since then it has been revamped to be a standard-compliant HDL simulator, currently supporting Verilog. It is capable of cosimulating with SystemC. It can be used just as an HDL simulator or to generate executable specifications written in Verilog and SystemC on the hardware side and in C, C++ and SystemC on the software side." 
  6. "Bjarne Stroustrup's FAQ – Where did the name "C++" come from?". http://public.research.att.com/~bs/bs_faq.html#name. සම්ප්‍රවේශය කෙරුණු දිනය 16 January 2008. 
  7. "ISO/IEC 14882:1998". http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&ics2=60&ics3=&csnumber=25845. 
  8. "ISO/IEC 14882:2003". http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&ics2=60&ics3=&csnumber=38110. 
  9. "ISO/IEC TR 19768:2007". http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&ics2=60&ics3=&csnumber=43289. 
  10. "ISO/IEC 14882:2011". http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?ics1=35&ics2=60&ics3=&csnumber=50372. 
  11. We have an international standard: C++0x is unanimously approved « Sutter’s Mill

අමතර කියවීම්[සංස්කරණය]

  • 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. 
  • Dewhurst, Stephen C. (2005). C++ Common Knowledge: Essential Intermediate Programming. Addison-Wesley. ISBN 0-321-32192-8. 
  • Lippman, Stanley B. (1996). Inside the C++ Object Model. Addison-Wesley. ISBN 0-201-83454-5. 
  • Sutter, Herb (2001). More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions. Addison-Wesley. ISBN 0-201-70434-X. 

External links[සංස්කරණය]

සැකිල්ල:ISO standards

සැකිල්ල:CProLang

"http://si.wikipedia.org/w/index.php?title=C%2B%2B&oldid=258751" වෙතින් සම්ප්‍රවේශනය කෙරිණි