C++: Const Member Function Explained With Examples

Updated on March 8, 2018
sirama profile image

I am a software engineer. I have been come across C++,MFC, .net technologies. I like playing video games & reading books.

1. Introduction

Const member function implies that the member function will not change the state of the object. The data member of the class represents the “state” of the object. So, the const member function grantees that it will not change the value in the data member till it returns to the caller. Let us see this with a code example.

2. The Code Example

Look at the C++ example code below. I explained the code in section 3.


// TestIt.cpp : Defines the entry point 
// for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class CRect
{
//Sample 01: Private Members
private:
	int m_len;
	int m_width;

public:
//Sample 02: Constructor
	CRect(int L, int W)
	{
		m_len = L;
		m_width = W;
	}

//Sample 03: Print data members
	void print() 
	{
		cout << "Lenght = " << m_len 
<< " Width = "<< m_width << endl ;
	}

//Sample 04: Const Member Function
	int GetArea() 
	{
		m_len++ ;
		return m_len * m_width;
	}


};

int main()
{
	//Sample 05: Create Rectangle Object
	CRect rct(10,5);

	//Sample 06: Print the dimension
	rct.print();

	//Sample 07: Print the Area of Rectangle
	cout << "Area = " << rct.GetArea();
}

3. Explanation of the Example

1) To explain the const member function, a class called CRect is created. It has two member variables named as m_len and m_width. These member variables represent the state of the class. Both the member variables are in the private scope. That means they can be accessed only inside the class member functions.

//Sample 01: Private Members
private:
	int m_len;
	int m_width;

2) The constructor of the class sets the length and width of the CRect object. The constructor takes length (L) and width (W) of the rectangle as a parameter. These parameters are copied to the local members m_len and m_width inside the body of the constructor.

//Sample 02: Constructor
	CRect(int L, int W)
	{
		m_len = L;
		m_width = W;
	}

3) A print member function prints the internal state of the object. That means it prints the length and width of the CRect object. Note that we used iostream object to print the values in the console output. The cout is the iostream object and it flushes the string through the operator <<. The Operator << pushes the output to the console. The Operator >> pushes the input from console to the program. We will see cout in some other hub with more details.

//Sample 03: Print data members
	void print() 
	{
		cout << "Lenght = " << m_len 
			<< " Width = "<< m_width << endl ;
	}

4) The GetArea member function calculates the area of the Rectangle by multiplying its internal members (i.e.) m_len and m_width. Also, note the const keyword at the end of the function parameter list. This tells that the member function GetArea is read-only function and it does not the change the data members m_len and m_width at any point in time.

Changing the member variable inside the function body will be detected by the compiler and the compiler will not allow changing the state of the object inside the constant member function. The picture shows how const member function differ from normal function. A normal function can access the member variable of the class and can replace the value contained in the member variable. But const member functions allows reading the data from the member variables and it does not allow writing a new value.

rct object's member variables and member functions
rct object's member variables and member functions | Source
//Sample 04: Const Member Function
	int GetArea() const
	{
		return m_len * m_width;
	}

5) In the program entry, we created a rct object with the dimension of 10x5. Now, I can say the state of the rct object as length 10 and width 5. The print() member function called on the rct object will print the state of the rct object. Finally, we call the member function of the rct object GetArea(). Note that the member function is a const member function and it guarantees that this function does not make any changes to the rct object.

	//Sample 05: Create Rectangle Object
	CRect rct(10,5);

	//Sample 06: Print the dimension
	rct.print();

	//Sample 07: Print the Area of Rectangle
	cout << "Area = " << rct.GetArea();

© 2013 sirama

Comments

    0 of 8192 characters used
    Post Comment

    • profile image

      Shalini 

      5 weeks ago

      Nice

    • sirama profile imageAUTHOR

      sirama 

      4 months ago

      Thank You pokhi

    • profile image

      pokhi 

      4 months ago

      very good article and understandable..........

    • profile image

      ibadee 

      5 months ago

      helpful it was!

    • profile image

      Dhiraj 

      18 months ago

      Nice tutorial and heads up for good coding

    • sirama profile imageAUTHOR

      sirama 

      5 years ago

      So, it also should be a const method, right?

      Definitely that is right. That is how people design their software. To keep the hub simple and explain the concept in picture I just picked a print method as Non const.

    • profile image

      Narendra Kumar 

      5 years ago

      Hi,

      What you said about GetArea() method is right.

      But, why you are not making the print() method also as const?

      print() method also doesn't make any changes to data.

      So, it also should be a const method, right?

      Thanks,

      Narendra

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, owlcation.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://owlcation.com/privacy-policy#gdpr

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)