[इसके आविष्कारक बजेर्न स्ट्राउस्ट्रप के अनुसार](https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2014/Keynote),
के लिए डिजाइन किया गया था
* एक "बेहतर सी" बनें
* डेटा एब्स्ट्रैक्शन का समर्थन करें
* ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का समर्थन करें
* सामान्य प्रोग्रामिंग का समर्थन करें
हालांकि इसका सिंटैक्स नई भाषाओं की तुलना में अधिक कठिन या जटिल हो सकता है, इसका व्यापक रूप से उपयोग किया जाता है क्योंकि यह मूल निर्देशों को संकलित करता है जो हो सकते हैं सीधे प्रोसेसर द्वारा चलाया जाता है और हार्डवेयर पर कड़ा नियंत्रण प्रदान करता है (जैसे सी) जेनेरिक, अपवाद और कक्षाओं जैसी उच्च-स्तरीय सुविधाओं की पेशकश करते हुए। गति और कार्यक्षमता का यह संयोजन C++ बनाता है | सबसे व्यापक रूप से उपयोग की जाने वाली प्रोग्रामिंग भाषाओं में से एक।
```c++
//////////////////
// सी . से तुलना
//////////////////
// C++ _लगभग_C का सुपरसेट है और इसके लिए अपना मूल सिंटैक्स साझा करता है
// परिवर्तनीय घोषणाएं, आदिम प्रकार, और कार्य।
// सी की तरह ही, आपके प्रोग्राम का एंट्री पॉइंट एक फंक्शन है, जिसे कहा जाता है
// मुख्य एक पूर्णांक वापसी प्रकार के साथ।
// यह मान प्रोग्राम की निकास स्थिति के रूप में कार्य करता है।
// अधिक जानकारी के लिए https://en.wikipedia.org/wiki/Exit_status देखें।
int main(int argc, char** argv)
{
// कमांड लाइन तर्क उसी तरह argc और argv द्वारा पारित किए जाते हैं
// वे सी में हैं।
// argc तर्कों की संख्या को इंगित करता है,
// और argv सी-स्टाइल स्ट्रिंग्स (चार *) की एक सरणी है
// तर्कों का प्रतिनिधित्व करते हैं।
// पहला तर्क वह नाम है जिसके द्वारा प्रोग्राम को बुलाया गया था।
// यदि आप तर्कों की परवाह नहीं करते हैं तो argc और argv को छोड़ा जा सकता है,
// int main का फंक्शन सिग्नेचर देना ()
// 0 की निकास स्थिति सफलता को इंगित करती है।
return 0;
}
// हालाँकि, C++ निम्नलिखित में से कुछ तरीकों से भिन्न होता है:
// सी ++ में, वर्ण अक्षर वर्ण हैं
sizeof('c') == sizeof(char) == 1
// सी में, चरित्र अक्षर ints . हैं
sizeof('c') == sizeof(int)
// सी ++ में सख्त प्रोटोटाइप है
void func(); // फ़ंक्शन जो कोई तर्क स्वीकार नहीं करता है
// सी में
void func(); // फ़ंक्शन जो किसी भी संख्या में तर्कों को स्वीकार कर सकता है
// C++ में NULL के बजाय nullptr का प्रयोग करें
int* ip = nullptr;
// सी मानक हेडर सी ++ में उपलब्ध हैं।
// सी हेडर .h में समाप्त होते हैं, जबकि
// सी ++ हेडर "सी" के साथ उपसर्ग कर रहे हैं और कोई ".एच" प्रत्यय नहीं है।
// सी ++ मानक संस्करण:
#include <cstdio>
// सी मानक संस्करण:
#include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
///////////////////////
// फंक्शन ओवरलोडिंग
///////////////////////
// सी ++ फ़ंक्शन ओवरलोडिंग का समर्थन करता है
// बशर्ते प्रत्येक फ़ंक्शन अलग-अलग पैरामीटर लेता है।
void print(char const* myString)
{
printf("String %s\n", myString);
}
void print(int myInt)
{
printf("My int is %d", myInt);
}
int main()
{
print("Hello"); // Resolves to void print(const char*)
print(15); // Resolves to void print(int)
}
/////////////////////////////
// डिफ़ॉल्ट फ़ंक्शन तर्क
/////////////////////////////
// आप किसी फ़ंक्शन के लिए डिफ़ॉल्ट तर्क प्रदान कर सकते हैं
// अगर वे कॉलर द्वारा प्रदान नहीं किए जाते हैं।
void doSomethingWithInts(int a = 1, int b = 4)
{
// यहां इनट्स के साथ कुछ करें
}
int main()
{
doSomethingWithInts(); // a = 1, b = 4
doSomethingWithInts(20); // a = 20, b = 4
doSomethingWithInts(20, 5); // a = 20, b = 5
}
// डिफ़ॉल्ट तर्क तर्क सूची के अंत में होना चाहिए।
void invalidDeclaration(int a = 1, int b) // Error!
{
}
/////////////
// नेमस्पेस
/////////////
// नेमस्पेस वैरिएबल, फंक्शन के लिए अलग-अलग स्कोप प्रदान करते हैं,
// और अन्य घोषणाएं।
// नेमस्पेस को नेस्ट किया जा सकता है।
namespace First {
namespace Nested {
void foo()
{
printf("This is First::Nested::foo\n");
}
} // अंत नामस्थान नेस्टेड
} // अंतिम नाम स्थान पहले
namespace Second {
void foo()
{
printf("This is Second::foo\n");
}
}
void foo()
{
printf("This is global foo\n");
}
int main()
{
// नेमस्पेस सेकेंड से वर्तमान दायरे में सभी प्रतीकों को शामिल करता है। ध्यान दें
// वह बस foo() अब काम नहीं करता है, क्योंकि यह अब अस्पष्ट है कि क्या
// हम फू को नेमस्पेस सेकेंड या टॉप लेवल में कॉल कर रहे हैं।
using namespace Second;
Second::foo(); // प्रिंट "यह दूसरा है :: फू"
First::Nested::foo(); // प्रिंट "यह पहला है :: नेस्टेड :: फू"
::foo(); // प्रिंट करता है "यह वैश्विक फू है"
}
///////////////
// इनपुट आउटपुट
///////////////
// सी ++ इनपुट और आउटपुट स्ट्रीम का उपयोग करता है
// cin, cout, और cerr stdin, stdout और stderr का प्रतिनिधित्व करते हैं।
// <<इंसर्शनऑपरेटरहैऔर>> एक्सट्रैक्शन ऑपरेटर है।
#include <iostream> // I/O स्ट्रीम के लिए शामिल करें
using namespace std; // स्ट्रीम एसटीडी नेमस्पेस (मानक पुस्तकालय) में हैं
int main()
{
int myInt;
// स्टडआउट (या टर्मिनल / स्क्रीन) पर प्रिंट करता है
cout << "Enter your favorite number:\n";
// इनपुट लेता है
cin >> myInt;
// cout को भी स्वरूपित किया जा सकता है
cout << "Your favorite number is " <<myInt<<'\n';
// प्रिंट करता है "आपका पसंदीदा नंबर <myInt>" है
cerr << "Used for error messages";
}
//////////
// स्ट्रिंग्स
//////////
// सी ++ में स्ट्रिंग्स ऑब्जेक्ट हैं और इसमें कई सदस्य कार्य हैं
#include <string>
using namespace std; // स्ट्रिंग्स नेमस्पेस एसटीडी (मानक पुस्तकालय) में भी हैं
string myString = "Hello";
string myOtherString = " World";
// + का उपयोग संयोजन के लिए किया जाता है।
cout <<myString+myOtherString;//"HelloWorld"
cout <<myString+"You";//"HelloYou"
// सी ++ स्ट्रिंग्स म्यूटेबल हैं।
myString.append(" Dog");
cout <<myString;//"HelloDog"
/////////////
// संदर्भ
/////////////
// सी में वाले जैसे पॉइंटर्स के अलावा,
// सी ++ में _references_ हैं।
// ये पॉइंटर प्रकार हैं जिन्हें एक बार सेट करने के बाद पुन: असाइन नहीं किया जा सकता है
// और शून्य नहीं हो सकता।
// उनके पास वैरिएबल के समान सिंटैक्स भी है:
// नहीं * dereferencing के लिए आवश्यक है और
// और (का पता) असाइनमेंट के लिए उपयोग नहीं किया जाता है।
using namespace std;
string foo = "I am foo";
string bar = "I am bar";
string& fooRef = foo; // यह foo का संदर्भ बनाता है।
fooRef += ". Hi!"; // संदर्भ के माध्यम से फू को संशोधित करें
cout <<fooRef;//प्रिंट"Iamfoo.Hi!"
// "fooRef" को पुन: असाइन नहीं करता है। यह "फू = बार" जैसा ही है, और
// फू == "मैं बार हूँ"
// इस लाइन के बाद।
cout <<&fooRef <<endl;//फूकापताप्रिंटकरताहै
fooRef = bar;
cout <<&fooRef <<endl;//अभीभीफूकापताप्रिंटकरताहै
cout <<fooRef;//प्रिंट"Iambar"
// fooRef का पता वही रहता है, यानी यह अभी भी foo की बात कर रहा है।
const string& barRef = bar; // बार के लिए एक कॉन्स्टेबल संदर्भ बनाएं।
// सी की तरह, कॉन्स्ट वैल्यू (और पॉइंटर्स और रेफरेंस) को संशोधित नहीं किया जा सकता है।
barRef += ". Hi!"; // त्रुटि, कॉन्स्ट संदर्भों को संशोधित नहीं किया जा सकता है।
// साइडट्रैक: इससे पहले कि हम संदर्भों के बारे में अधिक बात करें, हमें एक अवधारणा पेश करनी चाहिए
// एक अस्थायी वस्तु कहा जाता है। मान लीजिए हमारे पास निम्नलिखित कोड है:
string tempObjectFun() { ... }
string retVal = tempObjectFun();
// दूसरी पंक्ति में वास्तव में क्या होता है:
// - एक स्ट्रिंग ऑब्जेक्ट tempObjectFun से लौटाया जाता है
// - तर्क के रूप में लौटाई गई वस्तु के साथ एक नई स्ट्रिंग का निर्माण किया जाता है
// कंस्ट्रक्टर
// - लौटाई गई वस्तु नष्ट हो जाती है
// लौटाई गई वस्तु को अस्थायी वस्तु कहा जाता है। अस्थायी वस्तुएं हैं
// जब भी कोई फ़ंक्शन किसी ऑब्जेक्ट को लौटाता है, तब बनाया जाता है, और वे नष्ट हो जाते हैं
// संलग्न अभिव्यक्ति के मूल्यांकन का अंत (ठीक है, यह वही है
// मानक कहता है, लेकिन संकलक को इस व्यवहार को बदलने की अनुमति है। ऊपर देखो
// "वापसी मूल्य अनुकूलन" यदि आप इस तरह के विवरण में हैं)। तो इसमें
// कोड:
foo(bar(tempObjectFun()))
// यह मानते हुए कि फू और बार मौजूद हैं, tempObjectFun से लौटाई गई वस्तु है
// बार को पास किया गया, और फू को कॉल करने से पहले इसे नष्ट कर दिया गया।
// अब वापस संदर्भों पर। "संलग्नक के अंत में" का अपवाद
// अभिव्यक्ति" नियम यह है कि यदि एक अस्थायी वस्तु एक कॉन्स्ट संदर्भ के लिए बाध्य है, तो
// किस मामले में इसका जीवन वर्तमान दायरे तक बढ़ जाता है:
void constReferenceTempObjectFun() {
// constRef अस्थायी वस्तु प्राप्त करता है, और यह इस के अंत तक मान्य है
// समारोह।
const string& constRef = tempObjectFun();
...
}
// सी ++ 11 में पेश किया गया एक अन्य प्रकार का संदर्भ विशेष रूप से अस्थायी के लिए है
// ऑब्जेक्ट्स। आपके पास इसके प्रकार का एक चर नहीं हो सकता है, लेकिन इसमें पूर्वता होती है
// अधिभार संकल्प:
void someFun(string& s) { ... } // नियमित संदर्भ
void someFun(string&& s) { ... } // अस्थायी वस्तु का संदर्भ
string foo;
someFun(foo); // नियमित संदर्भ के साथ संस्करण को कॉल करें
someFun(tempObjectFun()); // अस्थायी संदर्भ के साथ संस्करण को कॉल करें
// उदाहरण के लिए, आप कंस्ट्रक्टर के इन दो संस्करणों को देखेंगे
// std::basic_string:
basic_string(const basic_string& other);
basic_string(basic_string&& other);
// विचार यह है कि अगर हम एक अस्थायी वस्तु से एक नई स्ट्रिंग का निर्माण कर रहे हैं (जो
// वैसे भी जल्द ही नष्ट होने जा रहा है), हम अधिक कुशल हो सकते हैं
// कंस्ट्रक्टर जो उस अस्थायी स्ट्रिंग के कुछ हिस्सों को "बचाता" है। आप इसे देखेंगे
// अवधारणा को "मूव सेमेन्टिक्स" के रूप में जाना जाता है।
/////////////////////
// Enums
/////////////////////
// Enums सबसे अधिक उपयोग किए जाने वाले स्थिरांक को मान निर्दिष्ट करने का एक तरीका है
// आसान विज़ुअलाइज़ेशन और कोड को पढ़ना
enum ECarTypes
{
Sedan,
Hatchback,
SUV,
Wagon
};
ECarTypes GetPreferredCarType()
{
return ECarTypes::Hatchback;
}
// सी ++ 11 के रूप में एनम को एक प्रकार असाइन करने का एक आसान तरीका है जो हो सकता है
// डेटा के क्रमांकन में उपयोगी और एनम को आगे-पीछे परिवर्तित करना
// सी ++ में अधिकांश ऑपरेटर अन्य भाषाओं की तरह ही हैं
// लॉजिकल ऑपरेटर्स
// सी ++ बूलियन अभिव्यक्तियों के लिए शॉर्ट-सर्किट मूल्यांकन का उपयोग करता है, यानी, दूसरा तर्क निष्पादित किया जाता है या
// केवल तभी मूल्यांकन किया जाता है जब पहला तर्क अभिव्यक्ति के मूल्य को निर्धारित करने के लिए पर्याप्त नहीं है
true && false // निष्पादित करता है **तार्किक और** असत्य उत्पन्न करने के लिए
true || false // सत्य उत्पन्न करने के लिए **तार्किक या** करता है
! true // प्रदर्शन करता है **तार्किक नहीं** झूठा उत्पन्न करने के लिए
// प्रतीकों का उपयोग करने के बजाय समकक्ष कीवर्ड का उपयोग किया जा सकता है
true and false // प्रदर्शन करता है **तार्किक और ** गलत उत्पन्न करने के लिए
true or false // सत्य उत्पन्न करने के लिए **तार्किक या ** करता है
not true // निष्पादित करता है **तार्किक नहीं ** असत्य उत्पन्न करने के लिए
// बिटवाइज ऑपरेटर्स
// **<<** लेफ्ट शिफ्ट ऑपरेटर
// <<बिट्सकोबाईंओरशिफ्टकरताहै
4 <<1//8देनेकेलिए4केबिट्सको1सेबायींओरशिफ्टकरताहै
// x <<nकोx*2^n.केरूपमेंमानाजासकताहै
// **>>** राइट शिफ्ट ऑपरेटर
// >> बिट्स को दाईं ओर शिफ्ट करता है
4 >> 1 // २ देने के लिए ४ के बिट्स को १ से दायीं ओर शिफ्ट करता है
// x >> n को x / 2^n . के रूप में माना जा सकता है
~4 // Performs a bitwise not
4 | 3 // Performs bitwise or
4 & 3 // Performs bitwise and
4 ^ 3 // Performs bitwise xor
// समतुल्य कीवर्ड हैं
compl 4 // Performs a bitwise not
4 bitor 3 // Performs bitwise or
4 bitand 3 // Performs bitwise and
4 xor 3 // Performs bitwise xor
```
अग्रिम पठन:
* एक अप-टू-डेट भाषा संदर्भ [सीपीपी संदर्भ](http://cppreference.com/w/cpp) पर पाया जा सकता है।
* अतिरिक्त संसाधन [CPlusPlus](http://cplusplus.com) पर मिल सकते हैं।
* [TheChernoProject - C++](https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) पर भाषा की बुनियादी बातों और कोडिंग परिवेश को सेट करने वाला एक ट्यूटोरियल उपलब्ध है।