C++

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

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

### සම්මතකරනය 
නවතම සම්මතය වන්නේ 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;` උපකල්පනය කෙරේ).

```cpp
# include 

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

### අතිබැර(Overload) කිරීම 
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) 
Ｃ++ හී සාමාන්‍ය උරුමකරනය මෙන් බහුඋරුමකරනය ද භාවිත කළ හැක. බහුඋරුමකරනයේදී මව හා පියා එක්ව සැදෙන දරුවා හට මව, පියා දෙදෙනාගේම ලක්‍ෂණ ලබාදීමට හැකිවේ.

### බහුරූපතාව(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

## යොමුව 
## අමතර කියවීම් 
* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

* 

## External links 
* JTC1/SC22/WG21 – The ISO/IEC C++ Standard Working Group
** n3242.pdf – Final Committee Draft of "ISO/IEC IS 14882 – Programming Languages&nbsp;– 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
*  Interview with Bjarne Stroustrup.
* 
* 
* 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.