C++
පැරඩයිමය | බහු-පැරඩයිම: පටිපාටිගත, විධානාත්මක, ශ්රිතමය, වස්තු-නැඹුරු, පොදු, මොඩියුල |
---|---|
පවුල | C |
සැලසුම් කළේ | බ්යාර්න ස්ට්රෞස්ට්රප් |
සංවර්ධකයා | ISO/IEC JTC 1 (Joint Technical Committee 1) / SC 22 (Subcommittee 22) / WG 21 (Working Group 21) |
පළමුව ප්රකාශය | 1985 |
ස්ථායි නිකුතුව | C++20 (ISO/IEC 14882:2020)
/ 15 දෙසැම්බර් 2020 |
පූර්ව දර්ශන නිකුතුව | C++23
/ 17 මාර්තු 2022 |
ප්රරූප නීතිය | Static, nominative, partially inferred |
OS | Cross-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++ (/ˌsiːˌplʌsˈplʌs/ යනු ඩෙන්මාර්ක ජාතික පරිගණක විද්යාඥ බ්යාර්න ස්ට්රෞස්ට්රප් විසින් C ක්රමලේඛන භාෂාවට දිගුවක් ලෙස නිපදවන ලද පොදු-කාර්යය ක්රමලේඛන භාෂාවකි, වර්ග සහිත "C" ලෙසද මෙය හැඳින්වේ. කාලයත් සමග භාෂාව සැලකිය යුතු ලෙස පුළුල් වී ඇත, නූතන C++ වල වස්තු-නැඹුරු, පොදු, සහ ශ්රිතමය ලක්ෂණ ද, ඊට අමතරව පහළ-මට්ටමේ මතක පරිහරණයට අවශ්ය පහසුකම් ද ඇත. එය සෑම විටම සම්පාදිත භාෂාවක් ලෙස ක්රියාත්මක කෙරේ, එම C++ සම්පාදක සපයන බොහෝ ආයතන අතරට නිදහස් මෘදුකාංග පදනම, LLVM, මයික්රොසොෆ්ට්, ඉන්ටෙල්, Embarcadero, ඔරකල්, සහ IBM අයත් වේ, එම නිසා එය බොහෝ පද්ධතිවලදී භාවිතා කළ හැක.[10]
ඉතිහාසය
[සංස්කරණය]බිහානෙ ස්ටෘස්ට්රප් නම් ඩෙන්මාක් හා බ්රිතාන්ය සම්භවයක් ඇති පරිගණක විද්යාඥයා "සරණි සහිත 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
අගට යෙදී තිබෙන විට සිදුවන ප්රතික්ක්ෂේප කිරීමයි.
අමතර කියවීම්
[සංස්කරණය]- 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
යොමුව
[සංස්කරණය]- ^ a b c d e Stroustrup, Bjarne (1996). "A history of C++: 1979-1991". A history of C++: 1979-1991. ACM. pp. 699–769. .
- ^ Stroustrup, Bjarne (16 දෙසැම්බර් 2021). "C++20: Reaching for the Aims of C++ - Bjarne Stroustrup - CppCon 2021". CppCon.
- ^ 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.
- ^ "Chapel spec (Acknowledgements)" (PDF). Cray Inc. 1 ඔක්තෝබර් 2015. 24 ජූනි 2018 දින පැවති මුල් පිටපත වෙතින් සංරක්ෂිත පිටපත (PDF). සම්ප්රවේශය 14 ජනවාරි 2016.
- ^ "Rich Hickey Q&A by Michael Fogus". 11 ජනවාරි 2017 දින මුල් පිටපත වෙතින් සංරක්ෂණය කරන ලදී. සම්ප්රවේශය 11 ජනවාරි 2017.
- ^ Harry. H. Chaudhary (28 ජූලි 2014). "Cracking The Java Programming Interview :: 2000+ Java Interview Que/Ans". 27 මැයි 2021 දින පැවති මුල් පිටපත වෙතින් සංරක්ෂිත පිටපත. සම්ප්රවේශය 29 මැයි 2016.
- ^ Roger Poon (1 මැයි 2017). "Scaling JS++: Abstraction, Performance, and Readability". 11 මැයි 2020 දින පැවති මුල් පිටපත වෙතින් සංරක්ෂිත පිටපත. සම්ප්රවේශය 21 අප්රේල් 2020.
- ^ "FAQ Nim Programming Language". 11 ජූලි 2017 දින පැවති මුල් පිටපත වෙතින් සංරක්ෂිත පිටපත. සම්ප්රවේශය 21 අප්රේල් 2020.
- ^ "9. Classes — Python 3.6.4 documentation". docs.python.org. 23 ඔක්තෝබර් 2012 දින පැවති මුල් පිටපත වෙතින් සංරක්ෂිත පිටපත. සම්ප්රවේශය 9 ජනවාරි 2018.
- ^ ස්ට්රෞස්ට්රප්, බ්යාර්න (1997). "1". ද C++ ප්රෝග්රමින්ග් ලැන්ග්වේජ් (තුන්වන ed.). ISBN 0-201-88954-4. OCLC 59193992.
- ^ "Bjarne Stroustrup's FAQ – Where did the name "C++" come from?". සම්ප්රවේශය 16 ජනවාරි 2008.
- ^ "ISO/IEC 14882:1998".
- ^ "ISO/IEC 14882:2003".
- ^ "ISO/IEC TR 19768:2007".
- ^ "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.
- Brokken, Frank (2010). C++ Annotations. University of Groningen. ISBN 90-367-0470-7.
- Lua දෝෂය in Module:Citation/CS1/Utilities at line 206: Called with an undefined error condition: maint_year.
- 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.
- Sutter, Herb (2004). Exceptional C++ Style. Addison-Wesley. ISBN 0-201-76042-8.
- Vandevoorde, David; Josuttis, Nicolai M. (2003). C++ Templates: The complete Guide. Addison-Wesley. ISBN 0-201-73484-2.
External links
[සංස්කරණය] C++ ගැන තවත් දේ විකිපිඩියා සහෝදර ව්යාපෘති හරහා සොයාගන්න
| |
වික්ෂනරිය වෙතින් අර්ථ දැක්වීම් | |
කොමන්ස් වෙතින් ඡායාරූප හා මාධ්ය | |
විකිසරසවිය වෙතින් ඉගෙනුම් මූලාශ්ර | |
විකිකියමන් වෙතින් උපුටා දැක්වීම් | |
විකිපොත් වෙතින් පෙළපොත් |
- JTC1/SC22/WG21 – The ISO/IEC C++ Standard Working Group
- n3242.pdf – Final Committee Draft of "ISO/IEC IS 14882 – Programming Languages – C++" (28 February 2011)
- A paper by Stroustrup showing the timeline of C++ evolution (1979–1991)
- Bjarne Stroustrup's C++ Style and Technique FAQ
- C++ FAQ Lite by Marshall Cline
- C++ FQA Lite – Yossi Kreinin
- Hamilton, Naomi (25 ජූනි 2008). "The A-Z of Programming Languages: C++". Computerworld. Interview with Bjarne Stroustrup.
- Kalev, Danny (15 අගෝස්තු 2008). "The State of the Language: An Interview with Bjarne Stroustrup". DevX. QuinStreet Inc. 31 ජනවාරි 2009 දින මුල් පිටපත වෙතින් සංරක්ෂණය කරන ලදී. සම්ප්රවේශය 11 මාර්තු 2013.
- Katdare, Kaustubh (1 පෙබරවාරි 2008). "Dr. Bjarne Stroustrup – Inventor of C++". CrazyEngineers. 26 ජනවාරි 2013 දින මුල් පිටපත වෙතින් සංරක්ෂණය කරන ලදී. සම්ප්රවේශය 11 මාර්තු 2013.
- Code practices for not breaking binary compatibility between releases of C++ libraries (from KDE Techbase)
- The Standard C++ Foundation is a non-profit organization that promotes the use and understanding of standard C++. Bjarne Stroustrup is a director of the organization.