Difference between C structures and C++ structures

In C++, struct and class are exactly the same things, except for that struct defaults to public visibility and class defaults to private visibility.
Some important differences between the C and C++ structures:

  1. Member functions inside structure: Structures in C cannot have member functions inside structure but Structures in C++ can have member functions along with data members.
  2. Direct Initialization: We cannot directly initialize structure data members in C but we can do it in C++.

    C

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program to demonstrate that direct
    // member initialization is not possible in C
    #include <stdio.h>
      
    struct Record {
        int x = 7;
    };
      
    // Driver Program
    int main()
    {
        struct Record s;
        printf("%d", s.x);
        return 0;
    }
    /* Output :  Compiler Error
       6:8: error: expected ':', ', ', ';', '}' or 
      '__attribute__' before '=' token
      int x = 7;
            ^
      In function 'main': */

    chevron_right

    
    

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP program to initialize data member in c++
    #include <iostream>
    using namespace std;
      
    struct Record {
        int x = 7;
    };
      
    // Driver Program
    int main()
    {
        Record s;
        cout << s.x << endl;
        return 0;
    }
    // Output
    // 7

    chevron_right

    
    


    Output:



    7
  3. Using struct keyword: In C, we need to use struct to declare a struct variable. In C++, struct is not necessary. For example, let there be a structure for Record. In C, we must use “struct Record” for Record variables. In C++, we need not use struct and using ‘Record‘ only would work.
  4. Static Members: C structures cannot have static members but is allowed in C++.

    C

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program with structure static member
    struct Record {
        static int x;
    };
      
    // Driver program
    int main()
    {
        return 0;
    }
    /* 6:5: error: expected specifier-qualifier-list 
       before 'static'
         static int x;
         ^*/

    chevron_right

    
    

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C++ program with structure static member
      
    struct Record {
        static int x;
    };
      
    // Driver program
    int main()
    {
        return 0;
    }

    chevron_right

    
    


    This will generate an error in C but no error in C++.
  5. Constructor creation in structure: Structures in C cannot have constructor inside structure but Structures in C++ can have Constructor creation.

    C

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program to demonstrate that Constructor is not allowed
    #include <stdio.h>
      
    struct Student {
        int roll;
        Student(int x)
        {
            roll = x;
        }
    };
      
    // Driver Program
    int main()
    {
        struct Student s(2);
        printf("%d", s.x);
        return 0;
    }
    /* Output :  Compiler Error
       [Error] expected specifier-qualifier-list 
        before 'Student'
       [Error] expected declaration specifiers or 
       '...' before numeric constant
       [Error] 's' undeclared (first use 
       5555555555in this function)
       In function 'main': */

    chevron_right

    
    

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP program to initialize data member in c++
    #include <iostream>
    using namespace std;
      
    struct Student {
        int roll;
        Student(int x)
        {
            roll = x;
        }
    };
      
    // Driver Program
    int main()
    {
        struct Student s(2);
        cout << s.roll;
        return 0;
    }
    // Output
    // 2

    chevron_right

    
    


    Output:

    2
  6. sizeof operator: This operator will generate 0 for an empty structure in C whereas 1 for an empty structure in C++.
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program to illustrate empty structure
    #include <stdio.h>
      
    // empty structure
    struct Record {
    };
      
    // Driver program
    int main()
    {
        struct Record s;
        printf("%d\n", sizeof(s));
        return 0;
    }

    chevron_right

    
    

    Output in C:

    0
    

    Output in C++:

    1
  7. Data Hiding: C structures do not allow concept of Data hiding but is permitted in C++ as C++ is an object oriented language whereas C is not.
  8. Access Modifiers: C structures do not have access modifiers as these modifiers are not supported by the language. C++ structures can have this concept as it is inbuilt in the language.

Related Article: Structure vs Class in C++

This article is contributed by Shubham Chaudhary. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : gyanendra371



Article Tags :
Practice Tags :


7


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.