浅析C++关键字const的几个作用

2017-01-12 09:53:50来源:oschina作者:SamYjy人点击

第七城市


一、用const修饰基本数据类型
用const修饰符修饰基本数据类型时,被修饰的变量不能被修改。例如:
```
const double PI = 3.1415;
cout << "PI is: " << PI << endl;
//Can not do this: PI = 3.14;
```
又比如对于头文件中变量UINT_MAX (Unsigned maximum integer)的使用,也是只能输出和赋值给其他变量,而不能修改。
用法例如:
```
cout << "Value of the biggest unsigned integer can be represented: " << UINT_MAX << endl;
int max_int = UINT_MAX;
max_int ++; //max_int is 0 in this case.
cout << "max_int is: " << max_int << endl;
```
二、用const修饰类中的方法
const修饰符能够修饰类中的变量,用来表示此方法不得对该类的属性(数据域中的变量)进行修改。以下为对于此概念进行示意的记分册模拟程序(参考并适当修改Deitel系列的C++11程序设计第二版英文版的GradeBook例子)。
```
//This is file GradeBook.h
#include // program uses C++ standard string class
// GradeBook class definition
class GradeBook
{
public:
explicit GradeBook( std::string ); // constructor initialize courseName
void setCourseName( std::string ); // sets the course name
std::string getCourseName() const; // gets the course name
void displayMessage() const; // displays a welcome message
private:
std::string courseName; // course name for this GradeBook
}; // end class GradeBook
```
```
//This is file GradeBook.cpp
#include
#include "GradeBook.h" // include definition of class GradeBook
#include
using namespace std;
array b = {1, 2, 3, 4, 5};
//Implementation of other functions in the middle are omitted.
// display a welcome message to the GradeBook user
void GradeBook::displayMessage() const
{
//This operation is not allowed: courseName = "Art History";
//This is also not allowed: setCourseName("Art History");cout << "Array b: ";
for(int num : b)
{
num ++;
cout << num << ' ';
}
cout << endl;cout << "Welcome to the grade book for/n" << getCourseName()
<< "!" << endl;} // end function displayMessage
```
注意在上例函数displayMessage中,试图将类变量courseName通过任何形式(包括调用set方法)改为任何初始值以外的值都会导致编译错误。**然而,通过类的成员函数(即使被const修饰符修饰)修改当前文件中的全局变量是不受影响的。**例如此类中,数组b是可以被修改的。输出结果为2-6.
需要注意的是,**const修饰符修饰的是类中的方法,而不是在单个文件中的全局函数。**如,在main.cpp(包含main方法的文件中),以下代码为语法错误。原因是非成员函数(即面向对象中的方法)是不能用const修饰符修饰的。
```
#include
#include
#include "GradeBook.h" // include definition of class GradeBook
using namespace std;
array a = {1, 2, 3, 4, 5};
void printArray() const
{}
// function main begins program execution
int main()
{
printArray();
//Other codes are omitted.
return 0;

```
三、const与指针变量的关系
关于C++ const与指针变量的关系,请详见本人博客:
[浅谈C++指针变量与const关键字](https://my.oschina.net/SamYjy/blog/822461)
这里面将const关键字与指针变量的关系已经表述得比较清晰了。故在此就不再赘述。
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台