Course Curriculum

Structure vs class in C++

Structure vs class in C++

In C++, a structure is the same as a class except for a few differences. The most important of them is security. A Structure is not secure and cannot hide its implementation details from the end user while a class is secure and can hide its programming and designing details. Following are the points that expound on this difference:
1) Members of a class are private by default and members of a struct are public by default.
For example program 1 fails in compilation and program 2 works fine.

// Program 1
#include <stdio.h>

class Test {
int x; // x is private
};
int main()
{
Test t;
t.x = 30; // compiler error because x is private
getchar();
return 0;
}

// Program 2
#include <stdio.h>

struct Test {
int x; // x is public
};
int main()
{
Test t;
t.x = 30; // works fine because x is public
getchar();
return 0;
}
2) When deriving a struct from a class/struct, default access-specifier for a base class/struct is public. And when deriving a class, default access specifier is private.
For example program 3 fails in compilation and program 4 works fine.

// Program 3
#include <stdio.h>

class Base {
public:
int x;
};

class Derived : Base { }; // is equilalent to class Derived : private Base {}

int main()
{
Derived d;
d.x = 30; // compiler error becuase inheritance is private
getchar();
return 0;
}

// Program 4
#include <stdio.h>

class Base {
public:
int x;
};

struct Derived : Base { }; // is equilalent to struct Derived : public Base {}

int main()
{
Derived d;
d.x = 30; // works fine because inheritance is public
getchar();
return 0;
}
3) Class can have null values but structure can not have null values.

4) Memory of structure is allocated in stack while memory of class is allocated in heap.

5) Class require constructor and destructor but structure can not require it.

6) Classes support polymorphism and also be inherited but structure cannot be inherited

Abstraction in C++ (Prev Lesson)
(Next Lesson) Can a C++ class have an object of self type?