×

C++ Mutable keyword

C++ mutable keyword

Mutable class storage specifier in C++ Storage class specifiers in C are auto, register, static, and external. Typedef is also considered as a specifier of the storage class in C. C++ also supports all of those specifiers for storage class. In addition to this C++, adds an absolutely essential specifier for storage class whose name is mutable.

What is the use of mutability?

There is often a need to change one or more class/struct data members by the const method, even though you don't want the method to update other class/struct members. Using a mutable keyword, we can easily accomplish this task.

Consider this example where it may be useful to use the mutable. Suppose you go to the hotel and give an order to the waiter to bring some dishes of food. You suddenly decide to change the order of the food after you give an order. Suppose that the hotel provides the services for changing the ordered food and start ordering new food within ten min after the first order is issued. The order can't be canceled after 10 minutes, and the old order cannot be replaced with the new order. For details, see the code below.

#include <iostream>
#include <string.h>
using std::cout;
using std::endl;
class Customer
{
    char name[25];
    mutable char placedorder[50];
    int tableno;
    mutable int bill;
public:
    Customer(char* q, char* r, int b, int p)
    {
        strcpy(name, q);
        strcpy(placedorder, r);
        tableno = b;
        bill = p;
    }
    void changePlacedOrder(char* p) const
    {
        strcpy(placedorder, p);
    }
    void changeBill(int q) const
    {
        bill = q;
    }
    void display() const
    {
        cout << "Customer name is: " << name << endl;
        cout << "Product placed by customer is: " << placedorder << endl;
        cout << "table no is: " << tableno << endl;
        cout << "Total amount: " << bill << endl;
    }
};
int main()
{
    const Customer cus1("Peter Johenson", "Cold drink", 4, 250);
    cus1.display();
    cus1.changePlacedOrder("chicken fry");
    cus1.changeBill(420);
    cus1.display();
    return 0;
}

Output:

C++ mutable keyword

Watch the output of the above program closely placed order qualities and bill information. The main is modified from const feature since they are decided to declare to be mutable.

The mutable keyword is primarily used to change a given const object member. The feature passed to this pointer has become const when we declare a feature to be const. Adding mutable to a variable allows for a change of members by a const pointer. Mutable is especially useful if most members are constant, but a few need to be updated. Members of the data clarified as mutable may be updated even if they are the part of the object defined const. The mutable specifier cannot be used with names declared static or const or reference.

As an exercise, it predicts the output of two programs that follow.

// PROGRAM 1
#include <iostream>
using std::cout;
class Test {
public:
  int t;
  mutable int p;
  Test() { t = 8; p = 15; }
};
int main()
{                                                                        
    const Test l1;
    l1.p = 50;
    cout << l1.p;
    return 0;
}

Output:

C++ mutable keyword

//PROGRAM2

#include <iostream>
using namespace std;
class Test {
   public:
      int w;
   mutable int k;
   Test(int e=0, int f=0) {
      w=e;
      k=f;
   }
   void setw(int e=0) {
      w = e;
   }
   void setk(int f=0) {
      k = f;
   }
   void disp() {
      cout<<endl<<"w: "<<w<<" k: "<<k<<endl;
   }
};
int main() {
   const Test t(25,30);
   cout<<t.w<<" "<<t.k<<"\n";
   t.k=200; //k still can be changed, because k is mutable.
   cout<<t.w<<" "<<t.k<<"\n";
   return 0;
}

Output:      

C++ mutable keyword

Related Topics

Single level Inheritance

Inheritance is a fundamental element of C++’s Object-Oriented Programming (OOP). It allows a class (called the derived class) to inherit characteristics and attributes from another class (called the base class)....

5 minutes read.

Advanced C++ with Boost Library

The goal of the Boost Libraries is to be widely applicable and used in a variety of applications. For instance, they can in handy when working with huge numbers whose...

4 minutes read.

Dynamic Constructor in C++

Dynamic constructors create dynamic memory by using a dynamic memory allocator new within the constructor. This allows us to initialize objects dynamically. The term dynamic constructor is used when memory...

2 minutes read.

Hybrid Inheritance

C++ Hybrid Inheritance When more than one type of inheritance is combined in single inheritance is called as hybrid inheritance. C++ Hybrid Inheritance Example #include<iostream>   using namespace std;   class Student{       protected:           int rollno;       public:           void getRoll(int a){               rollno=a;           }           void putRoll(void){               cout <<"Roll No: "<< rollno<<endl;           }   };   class Test : public Student{       protected:           float subject1, subject2;       public:           void getMarks(float x, float y){               subject1=x;               subject2=y;           }           void putMarks(void){               cout<< "Marks gain: "<<endl <<"Subject1 =  "<<subject1<<endl<<"Subject2 = "<<subject2 <<endl;           }   };   class Sport{       protected:           float score;       public:           void getScore(float s){               score=s;           }           void putScore(void){               cout<<"Sports score: "<<score<<endl;           }   };   class Result : public Test, public Sport{       float total;       public:           void display(void);   };   void Result:: display(void){       total=subject1+subject2+score;       putRoll();       putMarks();       putScore();       cout<<"Total Score: "<<total<<endl;   }   int main(){       Result stu;       stu.getRoll(10);       stu.getMarks(40,50);       stu.getScore(60);       stu.display();       return 0;   } Output: Roll No: 10 Marks gain: Subject1 = 40 Subject2 = 50 Sports score: 60 Total...

1 minute read.

Inheritance Program in C++

What is Inheritance? Inheritance is the ability of a class to inherit traits and properties from another class. One of the most crucial aspects of Object-Oriented Programming is inheritance. The ability or...

9 minutes read.

C++ Bitset

Overview In C++, bitset represents a fixed-sequence of some bits values by either 0 and 1. Zero represents the value as false or unset, while 1 represents the value as true...

4 minutes read.

Skyline Problem in C++

We have given n rectangular buildings in a 2-dimensional city. Here, to compute the Skyline of the given n rectangle structures in a two-dimensional metropolis while removing hidden lines, the...

3 minutes read.

Handling multiple clients on the Server with multithreading using Socket Programming in C or C++

To understand this guide completely, the reader is assumed to be familiar with the foundations of server and client models and socket programming. If one wants to create any scalable...

7 minutes read.

Object in C++

In this article, we will learn about Object in C++. In short, an object is a stateful entity with behaviour. Data is referred to as state, and functionality is referred to...

3 minutes read.

Delete Operator in C++

Overview We can reserve allocation for a variable or an array at runtime in C++. Dynamic memory allocation is the term for this. After utilising a variable in C++, we must...

4 minutes read.

Structured Binding in C++

Structured binding is the new feature of C++ 17. It is used to bind the specified name with an element of the initializer. Structure binding is used to declare multiple...

3 minutes read.

C++ Heap Sort

Heapsort is executed on the structure of the heap data. We know heap is a complete tree in binary form. The heap tree can be of two different types: Min-heap,...

3 minutes read.

C++ 11 vs C++ 14 vs C++ 17

C++ is a language that is used to create a high-performance application. C++ 11, C++ 14, and C++ 17 are the different version of C++. There are some differences between...

1 minute read.

Size_t Data Type in C++

In C++, the type to express the object size in bytes is defined as Size_t, an unsigned integer type offered by the standard library for describing the object's size and...

3 minutes read.

C++ Fork

A new process known as a "child process" is created with the fork system function and runs concurrently with the process that invoked fork() (parent process). Both processes will carry...

4 minutes read.

Continue in C++ While loop

Continue statement: Inside the loop, the continue statement is used to control the loop. C++ utilizes the continue keyword to implement the continue statement, which transfers the program's flow at the...

4 minutes read.

Do-While Loop Examples in C++

Before we move on the examples of Do-While loop, let’s learn little bit about the Do-While loop in C++ language. Do While loop An iterative loop that checks the condition at the...

5 minutes read.

How to create a table in C++

C++ is a programming language that has evolved as an improvement of c language. It includes an object-oriented archetype. C++ programming language is a compiled language that complies with the...

3 minutes read.

How to create a button in C++

A button is an option through which a user can control to click a provided input to an application. There are several buttons, each with different styles, to maintain the...

3 minutes read.

Method overriding in C++

What is method overriding? Using the same function in derived class as their base class is referred to as function/method overriding in c++. Method overriding is an example of polymorphism. With...

2 minutes read.