अंतिम अद्यतन:2026-10-12
C++ struct¶
लेखक के बारे में:¶
व्यक्तिगत WeChat सार्वजनिक अकाउंट:

1.C में struct¶
- C में struct केवल डेटा के composite टाइप की तरह उपयोग होता है, यानी, स्ट्रक्चर declaration में केवल डेटा मेंबर रखे जा सकते हैं, फ़ंक्शन नहीं।
- C स्ट्रक्चर declaration में C++ के access modifiers उपयोग नहीं किए जा सकते, जैसे: public, protected, private, जबकि C++ में उपयोग किए जा सकते हैं।
- C में स्ट्रक्चर वेरिएबल परिभाषित करते समय, अगर नीचे वाली परिभाषा उपयोग करें तो struct लगाना ज़रूरी है।
- C का स्ट्रक्चर inherit नहीं हो सकता (यह कॉन्सेप्ट नहीं है)।
- अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो सामान्य रूप से चलेगा और सामान्य रूप से कॉल होगा! उदाहरण के लिए: struct Base से टकराता न हो ऐसा void Base() {} परिभाषित किया जा सकता है।
पूरा उदाहरण:
#include<stdio.h>
struct Base { // public
int v1;
// public: //error
int v2;
//private:
int v3;
//void print(){ // c中不能在结构体中嵌入函数
// printf("%s\n","hello world");
//}; //error!
};
void Base(){
printf("%s\n","I am Base func");
}
//struct Base base1; //ok
//Base base2; //error
int main() {
struct Base base;
base.v1=1;
//base.print();
printf("%d\n",base.v1);
Base();
return 0;
}
अंतिम आउटपुट:
पूरा कोड देखें: struct_func.c
2.C++ में struct¶
C से तुलना नीचे है:
- C++ स्ट्रक्चर में न केवल डेटा परिभाषित किया जा सकता है, बल्कि फ़ंक्शन भी।
- C++ स्ट्रक्चर में access modifiers उपयोग किए जा सकते हैं, जैसे: public, protected, private।
- C++ स्ट्रक्चर का उपयोग सीधे struct के बिना किया जा सकता है।
- C++ inheritance
- अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो सामान्य रूप से चलेगा और सामान्य रूप से कॉल होगा! लेकिन स्ट्रक्चर वेरिएबल परिभाषित करते समय केवल struct वाला उपयोग कर सकते हैं!
उदाहरण के लिए:
स्थिति 1: typedef से स्ट्रक्चर का alias परिभाषित न करना
उसी नाम का फ़ंक्शन जोड़ने से पहले:
उसी नाम का फ़ंक्शन जोड़ने के बाद:
स्थिति 2: typedef से स्ट्रक्चर का alias परिभाषित करना
typedef struct Base1 {
int v1;
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
पहले तीन उदाहरण
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
int main() {
struct Base base1; //ok
Base base2; //ok
Base base;
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
return 0;
}
पूरा कोड देखें: struct_func.cpp
inheritance उदाहरण
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
virtual void print(){
printf("%s\n","Base");
};
};
struct Derived:Base {
public:
int v2;
void print(){
printf("%s\n","Derived");
};
};
int main() {
Base *b=new Derived();
b->print();
return 0;
}
पूरा कोड देखें: ext_struct_func.cpp
उसी नाम का फ़ंक्शन
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
typedef struct Base1 {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
void Base(){
printf("%s\n","I am Base func");
}
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
int main() {
struct Base base; //ok
//Base base1; // error!
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
Base();
return 0;
}
3.सारांश¶
C और C++ में Struct का अंतर¶
| C | C++ |
|---|---|
| स्ट्रक्चर declaration में फ़ंक्शन नहीं रखे जा सकते | स्ट्रक्चर declaration में फ़ंक्शन रखे जा सकते हैं |
| C स्ट्रक्चर declaration में C++ के access modifiers उपयोग नहीं। | public, protected, private C++ में उपयोग किए जा सकते हैं। |
| C में स्ट्रक्चर वेरिएबल परिभाषित करते समय, अगर नीचे वाली परिभाषा उपयोग करें तो struct लगाना ज़रूरी। | struct लगाए बिना भी चलता है |
| स्ट्रक्चर inherit नहीं हो सकता (यह कॉन्सेप्ट नहीं है)। | inherit हो सकता है |
| अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो सामान्य रूप से चलेगा और सामान्य रूप से कॉल होगा! | अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो स्ट्रक्चर उपयोग करने के लिए केवल struct वाली परिभाषा उपयोग करें! |
संबंधित विषय¶
- C++ प्योर वर्चुअल फ़ंक्शन और एब्स्ट्रैक्ट क्लास | C++那些事
- C++ assert | C++那些事
- C++ bit-field | C++那些事
- C भाषा से C++ पॉलीमॉर्फ़िज़्म | C++那些事
- C++ const constant और qualifier | C++那些事
- C++ const परिवार | C++那些事
- C++ dereference ऑपरेटर * | C++那些事
- C++ इनिशियलाइज़ेशन और असाइनमेंट | C++那些事
- C++ multiple return values लिखने के तरीके | C++那些事
- C++ mutable कीवर्ड | C++那些事