Open In App

Difference Between C Structures and C++ Structures

Last Updated : 25 Nov, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Let's discuss, what are the differences between structures in C and structures in C++? In C++, structures are similar to classes.

Differences Between the C and C++ Structures

C Structures

C++ Structures

Only data members are allowed, it cannot have member functions.Can hold both: member functions and data members.
Cannot have static members.Can have static members.
Cannot have a constructor inside a structure.Constructor creation is allowed.
Direct Initialization of data members is not possible.Direct Initialization of data members is possible.
Writing the ‘struct’ keyword is necessary to declare structure-type variables.Writing the ‘struct’ keyword is not necessary to declare structure-type variables.
Do not have access modifiers.Supports access modifiers.
Only pointers to structs are allowed.Can have both pointers and references to the struct.
Sizeof operator will generate 0  for an empty structure.Sizeof operator will generate 1 for an empty structure.
Data Hiding is not possible.Data Hiding is possible.

Similarities Between the C and C++ Structures

  • Both in C and C++, members of the structure have public visibility by default.

Lets discuss some of the above mentioned differences and similarities one by one:

1. Member functions inside the structure: Structures in C cannot have member functions inside a structure but Structures in C++ can have member functions along with data members.

C
// C Program to Implement Member
// functions inside structure

#include <stdio.h>

struct marks {
    int num;

    // Member function inside Structure to
    // take input and store it in "num"
    void Set(int temp) { num = temp; }

    // function used to display the values
    void display() { printf("%d", num); }
};

// Driver Program
int main()
{
    struct marks m1;
    // calling function inside Struct to
    // initialize value to num
    m1.Set(9);

    // calling function inside struct to
    // display value of Num
    m1.display();
}

Output

This will generate an error in C but no error in C++. 
C++
// C++ Program to Implement Member functions inside
// structure

#include <iostream>
using namespace std;

struct marks {
    int num;

    // Member function inside Structure to
    // take input and store it in "num"
    void Set(int temp) { num = temp; }

    // function used to display the values
    void display() { cout << "num=" << num; }
};

// Driver Program
int main()
{
    marks m1;

    // calling function inside Struct to
    // initialize value to num
    m1.Set(9);

    // calling function inside struct to
    // display value of Num
    m1.display();
}

 
 


Output
num=9


 

2. Static Members: C structures cannot have static members but are allowed in C++. 


 

C
// C program with structure static member

struct Record {
    static int x;
};

// Driver program
int main() { return 0; }
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 not in C++. 

3. Constructor creation in structure: Structures in C cannot have a constructor inside a 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;
}
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;
}

This will generate an error in C.

Output in C++:

2

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


This will generate an error in C.

Output in C++: 

7

5. Using struct keyword: In C, we need to use a struct to declare a struct variable. In C++, a 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.

6. 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.  

7. Pointers and References: In C++, there can be both pointers and references to a struct in C++, but only pointers to structs are allowed in C. 

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

C
// C program to illustrate empty structure

#include <stdio.h>

// empty structure
struct Record {
};

// Driver Code
int main()
{
    struct Record s;
    printf("%lu\n", sizeof(s));
    return 0;
}
C++
// C++ program to illustrate empty structure
#include <iostream>
using namespace std;

// empty structure
struct Record {
};

// Driver program
int main()
{
    struct Record s;
    cout << sizeof(s);
    return 0;
}

// This code is contributed by Shubham Sharma


Output in C: 

0

Output in C++: 

1

NOTE:   The default type of  sizeof  is long unsigned int , that's why  "%lu" is used instead of "%d" in printf function.

9. Data Hiding: C structures do not allow the concept of Data hiding but are permitted in C++ as it is an object-oriented language whereas C is not. 

10. Constant Members: C struct may allow to declare constant members, but no way to initialize. But in C++, you can initialize using constructor initializer list

C
#include <stdio.h>

struct C_struct 
{
    const int i;
    int k;
};
int main()
{
    printf("Struct with constant members, but how to init??");
    return 0;
}
C++
#include <iostream>
using namespace std;

struct Cpp_Struct
{
  public:
    const int i;
    int k;
    Cpp_Struct():i(2),k(3){}
};
int main()
{
    Cpp_Struct obj1;
    cout << "Struct with constant members: " << obj1.i << " " << obj1.k << endl;
    return 0;
}

Output in C:

Struct with constant members, but how to init??

Output in C++:

Struct with constant members: 2 3


 
Related Article: Structure vs Class in C++
 


Next Article
Practice Tags :

Similar Reads