Tutorialspoint.dev

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

    // 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': */

    C++

    // 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


    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

    // 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;
         ^*/

    C++

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


    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



    // 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': */

    C++

    // 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


    Output:

    2
  6. sizeof operator: This operator will generate 0 for an empty structure in C whereas 1 for an empty structure in C++.
    // C program to illustrate empty structure
    #include <stdio.h>
      
    // empty structure
    struct Record {
    };
      
    // Driver program
    int main()
    {
        struct Record s;
        printf("%d ", sizeof(s));
        return 0;
    }

    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++

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



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter