विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

C++ struct

लेखक के बारे में:

व्यक्तिगत WeChat सार्वजनिक अकाउंट:

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;
}

अंतिम आउटपुट:

1
I am Base func

पूरा कोड देखें: struct_func.c

2.C++ में struct

C से तुलना नीचे है:

  • C++ स्ट्रक्चर में न केवल डेटा परिभाषित किया जा सकता है, बल्कि फ़ंक्शन भी।
  • C++ स्ट्रक्चर में access modifiers उपयोग किए जा सकते हैं, जैसे: public, protected, private।
  • C++ स्ट्रक्चर का उपयोग सीधे struct के बिना किया जा सकता है।
  • C++ inheritance
  • अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो सामान्य रूप से चलेगा और सामान्य रूप से कॉल होगा! लेकिन स्ट्रक्चर वेरिएबल परिभाषित करते समय केवल struct वाला उपयोग कर सकते हैं!

उदाहरण के लिए:

स्थिति 1: typedef से स्ट्रक्चर का alias परिभाषित न करना

उसी नाम का फ़ंक्शन जोड़ने से पहले:

struct Student {

};
//Student(){}
struct Student s; //ok
Student s;  //ok

उसी नाम का फ़ंक्शन जोड़ने के बाद:

struct Student {

};
Student(){}
struct Student s; //ok
Student s;  //error

स्थिति 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;
}
पूरा कोड देखें: struct_func_func.cpp

3.सारांश

C और C++ में Struct का अंतर

C C++
स्ट्रक्चर declaration में फ़ंक्शन नहीं रखे जा सकते स्ट्रक्चर declaration में फ़ंक्शन रखे जा सकते हैं
C स्ट्रक्चर declaration में C++ के access modifiers उपयोग नहीं। public, protected, private C++ में उपयोग किए जा सकते हैं।
C में स्ट्रक्चर वेरिएबल परिभाषित करते समय, अगर नीचे वाली परिभाषा उपयोग करें तो struct लगाना ज़रूरी। struct लगाए बिना भी चलता है
स्ट्रक्चर inherit नहीं हो सकता (यह कॉन्सेप्ट नहीं है)। inherit हो सकता है
अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो सामान्य रूप से चलेगा और सामान्य रूप से कॉल होगा! अगर स्ट्रक्चर का नाम फ़ंक्शन के नाम जैसा हो, तो स्ट्रक्चर उपयोग करने के लिए केवल struct वाली परिभाषा उपयोग करें!

संबंधित विषय

टिप्पणियाँ