C++ vs C Language
C और C++ एक paragraph में
C को Dennis Ritchie ने 1972 में Bell Labs में UNIX operating system लिखने के लिए बनाया। यह छोटी, तेज़ और hardware के करीब है। C++ को Bjarne Stroustrup ने 1979 से "C with Classes" के रूप में बनाना शुरू किया: यह लगभग पूरी C रखती है और object-oriented programming तथा कई safety और productivity features जोड़ती है। C++ ISO द्वारा standardised है; मुख्य versions हैं C++98, C++11, C++14, C++17, C++20 और C++23।
C और C++ में अंतर (table)
| # | बिंदु | C | C++ |
|---|---|---|---|
| 1 | Paradigm | Procedural | Multi-paradigm: procedural + object-oriented + generic |
| 2 | Classes और objects | नहीं (सिर्फ data वाला struct) | हाँ — data और functions वाली classes |
| 3 | Encapsulation / data hiding | Access control नहीं | private, protected, public |
| 4 | Inheritance और polymorphism | Support नहीं | Support (virtual functions सहित) |
| 5 | Input / output | <stdio.h> के printf(), scanf() | <iostream> के cout, cin (C functions भी चलते हैं) |
| 6 | Dynamic memory | malloc(), calloc(), free() | new, delete; smart pointers |
| 7 | Function overloading | Allowed नहीं | Allowed |
| 8 | Default arguments | नहीं | हाँ |
| 9 | References | नहीं (सिर्फ pointers) | हाँ: int& r = x; |
| 10 | Namespaces | नहीं | हाँ: std::, अपने भी |
| 11 | Exception handling | नहीं (error codes) | try, catch, throw |
| 12 | Templates / generic code | नहीं (सिर्फ macros) | Function और class templates |
| 13 | Standard library | C library (string.h, math.h …) | C library + STL: vector, map, sort… |
| 14 | String type | char arrays | std::string class |
| 15 | File extension | .c | .cpp, .cc, .cxx |
साथ-साथ: input और output
/* C */
#include <stdio.h>
int main(void) {
int age;
printf("Enter age: ");
scanf("%d", &age);
printf("Next year you will be %d\n", age + 1);
return 0;
}// C++
#include <iostream>
int main() {
int age;
std::cout << "Enter age: ";
std::cin >> age;
std::cout << "Next year you will be " << age + 1 << "\n";
return 0;
}C++ streams हर variable का type जानते हैं, इसलिए %d जैसे format specifiers गलत होने का डर नहीं, और input के लिए & भी नहीं चाहिए।
साथ-साथ: dynamic memory
/* C */ int *marks = (int *) malloc(5 * sizeof(int)); /* ... */ free(marks);
// C++ (classic) int* marks = new int[5]; // ... delete[] marks; // C++ (modern — manual free की ज़रूरत ही नहीं) std::vector<int> marks(5);
new constructors call करता है और उसमें cast या sizeof नहीं चाहिए। Modern C++ और आगे जाती है: containers और smart pointers memory अपने-आप free करते हैं।
C का struct vs C++ की class
/* C: सिर्फ data; functions बाहर */
struct Student { char name[30]; int marks; };
void print(struct Student s) { printf("%s %d\n", s.name, s.marks); }// C++: data और व्यवहार साथ में, access control के साथ
class Student {
std::string name;
int marks;
public:
Student(std::string n, int m) : name(n), marks(m) {}
void print() const { std::cout << name << " " << marks << "\n"; }
};C++ में struct के भी member functions हो सकते हैं; class से फ़र्क सिर्फ इतना है कि उसके members default रूप से public होते हैं।
Overloading और references
// सिर्फ C++ में संभव
int area(int side) { return side * side; }
int area(int l, int b) { return l * b; }
void addBonus(int& marks) { marks += 5; } // reference: * या &x नहीं चाहिए
int m = 70;
addBonus(m); // m 75 हो जाता हैC में दो अलग function नाम (area_square, area_rect) और pointer parameter (void addBonus(int *m), call addBonus(&m)) चाहिए होते।
दोनों में क्या एक जैसा है
- Basic data types (
int,char,float,double), operators और expressions। if,switch,for,while,do-while,break,continue।- Arrays, pointers और pointer arithmetic।
- Functions, recursion और preprocessor (
#include,#define)। - C standard library, जो C++ में
<cstdio>,<cmath>,<cstring>आदि के रूप में मिलती है।
कौन-सी इस्तेमाल करें?
| C लें जब… | C++ लें जब… |
|---|---|
| बहुत छोटा embedded/firmware code या OS kernel लिखना हो | बड़े applications, games, desktop software बनाने हों |
| Platform पर सिर्फ C compiler हो | Classes, STL containers और algorithms चाहिए |
| Memory और hardware को सबसे निचले स्तर पर समझना हो | आपका syllabus (CBSE Class 11–12 CS, कई B.Tech courses) C++ पढ़ाता हो |
आम भ्रम
- "C++ बस classes वाली C है" — modern C++ में templates, STL, lambdas, smart pointers और बहुत कुछ है।
- "C code हमेशा C++ में compile होता है" — नहीं, अगर वह C++ keywords को नाम बनाए या implicit
void*conversion पर टिका हो। - "
coutधीमा है, तो C++ धीमी है" — I/O speedstd::ios::sync_with_stdio(false)जैसी settings पर निर्भर है; calculation की speed बराबर है। - "C++ में
structके functions नहीं हो सकते" — हो सकते हैं।
5 students के नाम और marks store करने वाला program लिखें। पहले C में struct, char[] और printf से। फिर C++ में class, std::string, std::vector और cout से दोबारा लिखें। दोनों की lines गिनें और देखें किसे सही लिखना आसान था।
सारांश
- C procedural है; C++ OOP, generic programming और कई safety features जोड़ती है।
- C++ में classes, references, overloading, namespaces, exceptions, templates और STL हैं।
printf/scanf→cout/cin;malloc/free→new/deleteया बेहतर, containers और smart pointers।- ज़्यादातर C code valid C++ है, पर सब नहीं।
- एक ही algorithm के लिए दोनों बराबर तेज़ हैं।
संबंधित: C++ का परिचय, OOP concepts, C tutorial: C vs C++।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C और C++ में मुख्य अंतर क्या है?
क्या C program C++ program की तरह चल सकता है?
malloc से मिले void* को int* में रखने के लिए C++ में cast चाहिए, और new, class, delete C++ में keywords हैं, इसलिए इन्हें variable नाम बनाने वाला C code fail होगा।C और C++ में कौन तेज़ है?
क्या C++ से पहले C सीखनी चाहिए?
std::string, std::vector और classes के साथ) से शुरू करना भी ठीक है, और कई schools Class 11–12 में पहले C++ ही पढ़ाते हैं।