Learning C++: Public, Private and More Class

My previous blog post introduced creating classes in C++, and I used public. Re-reading that post I realised I should go into a little more detail on public and private.

Public and Private

geektechstuff_cpp_class_1
Rectangle class program

The spaces within C++ allow for data to be:

  • public

Public is available throughout the program. It can be defined in a class or method, then called on somewhere else. By default objects within a struct are public.

  • private

Private means it cannot be accessed outside of the area it is defined in. By default objects within a class are private, which is why I have declared them as public in my Rectangle class.

The reason for the public / private options is to keep data secure. For example, in regards to the Rectangle class, I may want to keep the width and height variables private but want to make a variable called recArea (containing the rectangle’s area) public.

To do this I need to modify my previous Rectangle class a little:

#include <iostream>

using namespace std;

class Rectangle {

int width;

int height;

public:

   Rectangle(int, int);

   int recArea(){

       return width*height;

     };

};

Rectangle::Rectangle(int x, int y) {

  width=x;

  height=y;

}

int main()

{

  Rectangle firstRectangle(4,6);

  Rectangle secondRectangle(8,12);

  

  cout << "first rectangle " << firstRectangle.recArea() << endl; 

  cout << "second rectangle " << secondRectangle.recArea() << endl;

  return 0;

}

Breaking this code down and the Rectangle class now has 2 private objects and 2 public objects:

class Rectangle {

int width;  // declares an integer variable called width (private)

int height; // declares an integer variable called height (private)

public:

   Rectangle(int, int); // Rectangle should expect 2 arguments (public)

   int recArea(){

       return width*height;

     }; // function to return width*height i.e. area of a shape (public)

};

Outside of the class a constructor is used to declare that when a Rectangle is created it should initialise the Rectangle object with the two integer variables being passed to width and height.

Rectangle::Rectangle(int x, int y) {

  width=x;

  height=y;

}
A C++ constructor
A C++ constructor

If I try to call the individual height or width of a rectangle object outside of the class space it will generate an error as both height and weight are private.

For example the below will not compile due to height and weight being private:

#include <iostream>

using namespace std;

class Rectangle {

int width;

int height;

public:

   Rectangle(int, int);

   int recArea(){

       return width*height;

     };

};

Rectangle::Rectangle(int x, int y) {

  width=x;

  height=y;

}

int main()

{

  Rectangle firstRectangle(4,6);

  Rectangle secondRectangle(8,12);

  

  cout << "first rectangle " << firstRectangle.height << endl;

  cout << "second rectangle " << secondRectangle.width << endl;

  return 0;

}
This will not compile as width and height are private and in the class space
This will not compile as width and height are private and in the class space

The C++ compiler on my Raspberry Pi tells us that the error is what we expected, height and width are private and unavailable in the space I have called them:

The compiler error explaining that height and width are private and unavailable
The compiler error explaining that height and width are private and unavailable

Welcome to GeekTechStuff

my home away from home and where I will be sharing my adventures in the world of technology and all things geek.

The technology subjects have varied over the years from Python code to handle ciphers and Pig Latin, to IoT sensors in Azure and Python handling Bluetooth, to Ansible and Terraform and material around DevOps.

Let’s connect