`

c++ special member functions- const and volatile members

    博客分类:
  • c++
c++ 
阅读更多

 

what are the special functions, the special function includes the following. 

 

 

  • constructor - initialization
  • destructor  - destruction
  • assignment
  • memmory management
  • type conversion

 

what we are going to do discuss here is the const and volatile member function.

 

Const member:

 

In general , any class that is spected to be used extensivly should declare the member functions that do not modify the class data members as const members. 

 

 

By const member does not change the class members. That is only half the truth, the user has to be vigilant because a constant member does not guarantee  that everything to which the classs object referes will remain invariant throughtout he invocation of the meber function.

 

First let' see the following class definition.

 

 

/**
* In general , any class that is spected to be used extensivly should declare the member functions that do not modify the class data members as const members. 
*/
class Text
{
public:
	void bad(const string &param) const; 
private:
	char * _text;
};

 

and then let's see the code as below., which shows that the C++ compiler does not detect the folowing violation because of pointer semantic.

 

 

/**
* though you cannot directly assign some value to class members, but the compiler is not able to guarantee that everything  to which the class object referes will remain invariant throughout the 
* invocation of hte member function
*/

void Text::bad(const string &param) const 
{
	_text = param.c_str(); // error: _text cannot be modified

	for (int ix = 0; ix < param.size(); ++ix) { 
		_text[ix] = param[ix]; // bad style but not an error 
	}
}
 

 

Let's see how you normally use the const mebers...

 

 

 

class Screen {
public:
	bool isEqual(char ch)  const; 

	/** overload of the const and non-const mmber functions 
	*
	*/
	char get(int x, int y);
	char get(int x, int y) const;
};
 

 

and only the const class object can invoke the const members... here is the code. 

 

 

void test_const_members() 
{
	const Screen cs;
	Screen s;

	char ch = cs.get(0, 0); // calls the const membres
	ch = s.get(0, 0);       // calls the non-const members
}

 

 

volatile members

 

it is less common that you will use this, but a member  or a constructor a destructor can be declared as  teh volatile member function. 

 

as with the const members, only volatile class object can access the volatile members. 

 

let's see an example. 

 

 

class Screen {
public:

       /*
	* const member is easy to understand , but what about the volatile members
	* 
	* A class object is declared volatile if its value can possibly be changed in ways outside eithe rthe control or detection of the compilers (for example),
	* only volatile members functions, constructors, and the destructor can be inovked by a volatile class object.
	*/
	void poll() volatile;
};
 

below is the code that test you how to use the volatile member function. 

 

 

 

void test_volatile_member()
{
	volatile Screen vs;

	vs.poll();

	vs.isEqual('a'); // error:  you can only call volatile member function by a volatile clas object
}
 

 

 

 

 

分享到:
评论

相关推荐

    const和volatile分析

    在C++编程语言中,`const`和`volatile`是两个非常重要的关键字,它们用于修饰变量,赋予变量特殊的属性。这两个关键字在理解程序的行为、内存模型以及多线程编程中起到至关重要的作用。在此,我们将深入探讨`const`...

    c++ 的array源码分析和reverse-iterator和-Array-const-iterator类

    c++ 的array源码分析和reverse-iterator和-Array-const-iterator类

    Const与Volatile

    详细介绍Const与Volatile的相同与不同

    EFFECTIVE C++ 条款03 尽量使用const 思维导图

    EFFECTIVE C++ 条款03 尽量使用const 思维导图 在 C++ 编程中,使用 const 关键字可以提高代码的可读性、可维护性和安全性。本文将详细介绍 EFFECTIVE C++ 的第三条款:尽量使用 const 思维导图。 一、const ...

    initializer for array of non-const data member(解决方案).md

    initializer for array of non-const data member(解决方案).md

    C++/C 面试题 const

    在C++和C编程语言中,`const`关键字是一个非常重要的概念,它涉及到常量、常量指针、指针常量以及常量指针常量等多方面的知识。`const`关键字的主要作用是限制变量的修改,以提高程序的安全性和可读性。下面将详细...

    const和volatile.pdf

    在C++编程中,`const`和`volatile`是两个非常重要的关键字,它们用于修饰变量的属性,帮助我们更好地控制和理解代码的行为。本文将详细探讨这两个关键字的含义、作用以及如何正确使用它们。 一、关键字`const` 1. ...

    static,const,volatile用法

    ### static、const、volatile用法解析 在编程领域中,`static`、`const`、`volatile` 这三个关键字非常常见且重要。它们分别用于控制变量的作用域、可变性和不可预测性,是理解程序行为的基础之一。下面将详细介绍...

    const extern static volatile 小结

    ### const extern static volatile 小结 #### 一、Const(常量) `const` 关键字在 C/C++ 语言中用于定义常量,即其值在程序运行期间不可更改的变量。`const` 可以与多种数据类型结合使用,例如 `const int x = 10...

    const,extern,static,volatile的使用

    ### const、extern、static、volatile ...通过以上的介绍可以看出,`const`、`extern`、`static` 和 `volatile` 这四个关键字在 C 和 C++ 中有着广泛的应用。正确地使用这些关键字可以极大地提高代码的质量和可维护性。

    C++中const用法全解

    C++ 中 const 用法全解 const 在 C++ 中占有重要作用,属于小兵立大功的典型,本文档详细介绍了如何使用 const。 1. const 常量 在 C++ 中,const 可以用来修饰变量,称为常量。例如:const int max = 100; 这种...

    C++基本功:全面掌握const、volatile和mutable关键字.docx

    在C++编程语言中,`const`、`volatile`和`mutable`是三个非常重要的关键字,它们用于控制变量、指针和引用的行为。本文将详细阐述这三个关键字的用途和应用场景。 首先,`const`关键字主要用于声明常量或者使得变量...

    c++中const关键字使用详解

    C++语言中的const关键字是一个非常重要的修饰符,它的核心作用是声明一个变量为常量,即不可修改。正确地理解和使用const,可以帮助提高程序的健壮性和安全性。本文将详细介绍const关键字在C++中的使用方法。 一、...

    C++中const、volatile、mutable使用方法小结

    C++中const、volatile、mutable使用方法小结 C++中const、volatile、mutable是三个重要的关键字,它们在日常编程中经常被使用,但是很多人对它们的理解和使用都不是很清楚。下面我们将对这三个关键字的使用方法进行...

    c++实验----------二叉树代码

    BinTreeNode&lt;Type&gt; *GetLeftChild() const {return leftChild;} BinTreeNode&lt;Type&gt; *GetRightChild() const {return rightChild;} void SetData(const Type &d) {data=d;} void SetLeftChild(BinTreeNode ...

    徐彤教程-C++编程const与static第0263讲:实例03-const成员函数

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    2.C++中的结构体-C管理进程代码-C++管理进程代码-C语言中的联合体.docx

    C++中的结构体和管理进程代码详解 结构体是C++中的一种自定义数据类型,可以包含多个变量和函数成员。结构体的成员可以是变量、函数或其他结构体。结构体的定义使用struct关键字,后面跟着结构体的名称和成员列表。...

    徐彤教程-C++编程const与static第0262讲:实例03-const成员变量

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    asp网站集锦你肯定喜欢

    Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 '---- CursorOptionEnum Values ---- Const adHoldRecords = &H00000100 Const adMovePrevious = &H00000200...

Global site tag (gtag.js) - Google Analytics