Skip to main content

It is a constant

In good old days, C programmers would use preprocessor directive to define constants.

e.g.

#define s 10

But we know now that, as compiler never gets to see these, preprocessor statements are error prone.

Hence we have const s. A constant - defined with keyword const promises that this entity is never going to change. And if we accidentally modify a const, compiler throws an error.

Let us look at an example.

#include<iostream>
using namespace std; 
int main()
{
    int a = 10;
    const int b=12;
    a++;
    b = 18;
} 

When we compile this program, compiler tells us that

default.cpp: In function ‘int main()’:
default.cpp:8:7: error: assignment of read-only variable ‘b’
     b = 18;

So it is catching the error that we are trying to modify a const.

Whenever a local variable or parameter need not be modified, declare it as a const. 

Yes, we can make even parameters as constant. We can make objects constant or even member functions constant.

constant parameters to functions

A function need not have constant parameters. Because, any way the parameters are not modified in the caller. Right?

But what if the parameter is a reference parameter? If a function has a const reference parameter, then this parameter can not be modified by the function. Such constant reference parameters are useful and should be used when we want to send large objects to functions without copying them.

Let us look at an example program which has a function with constant reference parameter.


#include<iostream>
using namespace std;
int swap(int &a,int &b)
{
   int temp = a;
   a = b;
   b = temp;
}
int swap(const int &a,const int &b)
{
   int temp = a;
   a = b;
   b = temp;
}
int main()
{
   int m=10,n=12;
   swap(m,n);
   cout<<"Now m and n are "<<m<<" "<<n<<endl;
   swap(m,n);
   cout<<"Now m and n are "<<m<<" "<<n<<endl;
}
When we compile this program we get an error because we are trying to modify constant parameters a and b in second swap  function.

constref.cpp: In function ‘int swap(const int&, const int&)’:
constref.cpp:12:6: error: assignment of read-only reference ‘a’
    a = b;
      ^
constref.cpp:13:6: error: assignment of read-only reference ‘b’
    b = temp;

So the compiler detects this error and warns us.

We can even have constant data members in classes and constant member functions. We will see them when we discuss about classes.


You can get these notes and also programs, quiz on C++ by downloading the app Simplified C++ by Hegdeapps  

Comments

Popular posts from this blog

Find the error in C++ program

This C++ program is not compiling. What do you think is the error with the program? #include<iostream> using namespace std; int main() {    int arr[10];    arr={1,2,3,4,5,6,7,8};    cout<<"arr[0]="<<arr[0];    return 0; } Is the error due to Not using printf Initialising the array with only 8 elements instead of 10 Initialising array in the next statement instead of in definition. None of the above  Now if you like this question, there are plenty more questions like this and programs and notes in my app Simplified C++. Download the Simplif ied C++   by Hegdeapps now By the way the correct answer is (3)

Abstract class

 If we can not create any objects of a class, then it is called an abstract class. A class is made abstract by adding at least one pure virtual function to it. Pure virtual function A function is said to be a pure virtual function , if it has no definition but has only declaration. Pure virtual function is defined with the keyword virtual and followed by return type, function name and "=0". class Shape { public: virtual void printarea() =0 ; }; int main () { Shape obj1; //error } Here printarea() function of Shape class is a pure virtual function as it has no body. To make a function as pure virtual function, you should use =0 at the end of virtual function declaration Abstract class When a class has at least one pure virtual function, it is incomplete and no objects can be created from that class. Such a class is called an abstract class . In the earlier example class Shape is an abstract class, and objects can not be created from t...

Friends of C++

Friend function Remember that a member which is not public (Private and protected )  can not be accessed from outside the class.  Three are some situations where you may need to access these. Keyword friend  is used for this. A friend functions and classes can access all members of a class.  This concept is controversial. People say friend concept violates data encapsulation  A friend function is a non-member function but still can access all the members of a class including private members. Such a function is declared within class body with the prefix "friend" class Number { int num; public: Number( int m){ /*code*/ } friend void printNum(Number ob); /*friend function*/ }; void printNum (Number obj) { cout << obj.num << "endl" ; } printNum() is not member of class Number . But it can still access all members including private members, because it is a friend. Friend class An object of a friend c...