Difference Between Structure and Class in C++
Last Updated :
11 Oct, 2024
In C++, a structure works the same way as a class, except for just two small differences. The most important of them is hiding implementation details. A structure will by default not hide its implementation details from whoever uses it in code, while a class by default hides all its implementation details and will therefore by default prevent the programmer from accessing them. The following table summarizes all of the fundamental differences.
S. No.
| Class
| Structure
|
---|
1
| Members of a class are private by default.
| Members of a structure are public by default.
|
---|
2
| It is declared using the class keyword.
| It is declared using the struct keyword.
|
---|
3
| It is normally used for data abstraction and inheritance.
| It is normally used for the grouping of different datatypes.
|
---|
4
| Syntax:
class class_name { data_member; member_function; };
| Syntax:
struct structure_name { structure_member1; structure_member2; };
|
---|
Understanding the differences between structures and classes is crucial in C++. The C++ Course explains these concepts in detail, helping you choose the appropriate data structure for your needs. Some examples that elaborate on these differences:
Members of a class are private by default and members of a structure are public by default.
For example, program 1 fails in compilation but program 2 works fine,
Program 1:
C++
// C++ Program to demonstrate that
// Members of a class are private
// by default
#include <iostream>
using namespace std;
class Test {
// x is private
int x;
};
int main() {
Test t;
// compiler error because x
// is private
t.x = 20;
return t.x;
}
Output:
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp: In function 'int main()':
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:10:9: error: 'int Test::x' is private
int x;
^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:18:7: error: within this context
t.x = 20;
^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:10:9: error: 'int Test::x' is private
int x;
^
./cf03c8d1-d4a3-43ea-a058-fe5b5303167b.cpp:20:14: error: within this context
return t.x;
^
Program 2:
C++
// C++ Program to demonstrate that
// members of a structure are public
// by default
#include <iostream>
using namespace std;
struct Test {
// x is public
int x;
};
int main()
{
Test t;
t.x = 20;
// works fine because x is public
cout << t.x;
}
A class is declared using the class keyword, and a structure is declared using the struct keyword.
Syntax:
class ClassName {
private:
member1;
member2;
public:
member3;
.
.
memberN;
};
Syntax:
struct StructureName {
member1;
member2;
.
.
.
memberN;
};
Inheritance is possible with classes, and with structures
For example, programs 3 and 4 work fine.
Program 3:
C++
// C++ Program to demonstrate
// Inheritance with classes.
#include <iostream>
using namespace std;
// Base class
class Parent {
public:
int x;
};
// Subclass inheriting from
// base class (Parent).
class Child : public Parent {
public:
int y;
};
int main()
{
Child obj1;
// An object of class Child has
// all data members and member
// functions of class Parent.
obj1.y = 7;
obj1.x = 91;
cout << obj1.y << endl;
cout << obj1.x << endl;
return 0;
}
Program 4:
C++
// C++ Program to demonstrate
// Inheritance with structures.
#include <iostream>
using namespace std;
struct Base {
public:
int x;
};
// is equivalent to
// struct Derived : public Base {}
struct Derived : Base {
public:
int y;
};
int main()
{
Derived d;
// Works fine because inheritance
// is public.
d.x = 20;
cout << d.x;
cin.get();
return 0;
}
Output
20
To know about the Difference between C structures and C++ structures refer to this article.