const修饰符如何使用,简单说明?

发布于 2018-01-30 16:29  编辑:盘子
0
计算机等级考试题库 扫码微信刷题

问:const修饰符如何使用,简单说明?


考无忧小编解答:如果一个对象被声明为常量,那么该对象就不可以调用类当中任何非常量型的成员函数(除了被编译器隐式调用的构造函数和析构函数)。看下面的代码;

#include iostream.h

class Date

{

int month,day,year;

public:

Date(int m,d,y):month(m),day(d),year(y) {}

void display()

{

cout < }

}

int main()

{

const Date dt(4,7,2004);

dt.display(); //error

return 0;

}

这个程序尽管编译时没有问题,但运行时却出错了。这是因为常量对象不能调用非常量函数。编译器只看函数的声明,而不在乎函数的具体实现。实际上函数的实现可以在程序中的任何地方,也可以是在另一个源代码文件中,这就超过了编译器的当前可见范围。

//date.h

class Date

{

int month,day,year;

public:

Date(int m,d,y);

void display();

};

//date.cpp

#include iostream.h

#include date.h

Date::Date(int m,d,y):month(m),day(d),year(y) {}

void Date::display()

{

cout < }

//program.cpp

#include iostream.h

#include date.cpp

int main()

{

const Date dt(4,7,2004);

dt.display();

return 0;

}

解决出错的问题有两个方法:第一是声明display()函数为常量型的

//in date.h

void display() const

//int date.cpp

void Date::display() const

{

cout < }

另一个解决方式就是省略掉Date对象声明里的const修饰符。

Date dt(4,7,2004);

还有另一个容易出错的地方:

void abc(const Date & dt)

{

dt.display(); //error 提示display没有const修饰符

}

函数abc()声明了一个Date对象的常量引用,这说明该函数不会修改传递进来的参数的值。如果Date::display()函数不是常量型的,那么在函数abc()里就不能调用它,因为编译器会认为Date::display()函数有可能会修改常量的值。

不论类对象是否是常量型的,它必须修改某个数据成员的值时,ANSI委员会设立了mutable关键字。





考无忧小编推荐:

更多计算机等级考试真题及答案>>>点击查看

想知道更多关于计算机等级报考指南、考试时间和考试信息的最新资讯在这里>>>点击查看


本文网址:http://www.k51.com.cn/info/jsjdjks/1801/3025400.html
选择分享到: