C++中const关键字用法详解及实例和源码下载(一)

最近在学习C++基础部分,看了两天书,已经看过了一遍,半知半解,回过头来重新看第二遍,深入了解一下C++的基础知识。现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲解了一些知识,后来在网上面搜了关于const的关键字的讲解,,但是搜到的内容和书上面讲解的内容有着非常让人疑惑的东西,看看下面的评论,更是惨不忍睹!真是误人子弟啊! 于是萌生写这篇博文的想法。本片博文力求每个知识点都是基于实例进行。大家阅读的时候可以根据实例和结果截图进行分析,对照着书中的理论进行理解!废话少说,现在开始! 1 常变量 定义常变量的一般形式: 类名 const 对象名;(或者) const 类名 对象名; 实例代码:

;int main(){const int a = 0;int const b = 1;cout<<a<<“===”<<b<<endl;return 0;}

结果:

上面定义了两个常变量,常变量定义的时候必须进行初始化的操作,如果例子中的a或者b没有初始化,则编译错误!

再看下面这个实例:

;int main(){const int a = 0;int const b = 1;cout<<a<<“===”<<b<<endl;b = 2;cout<<a<<“===”<<b<<endl;return 0;}

这个实例尝试修改常量b的值,但是常变量的值不允许更改,所以编译之后就会出现下面的错误:

如果大家编写程序之中遇到这样的错误,说明你对const修饰的变量重新赋值了! const修饰的变量是非常简单的,大家看看程序既可明白它的用法。

2 常对象 下面看一个类代码以及简单的调试代码

;class Student{public:Student(int a,string nam){age = a;name = nam;}void display();private:int age;string name;};void Student::display(){cout<<“age:”<<age<<endl;cout<<“name:”<<name<<endl;}int main(){Student st1(5,”lili”);st1.display();return 0;}

结果:

这个代码很常规,大家一看就明白。 下面把这个代码改动一下:

;class Student{public:Student(int a,string nam){age = a;name = nam;}void display();private:int age;string name;};void Student::display(){cout<<“age:”<<age<<endl;cout<<“name:”<<name<<endl;}int main(){const Student st1(5,”lili”);//增加了关键字constst1.display();return 0;}

只是增加了这一个关键字const之后,编译出现错误。原因在于:常对象不能调用该对象的非const型的成员函数。代码修改如下:

;class Student{public:Student(int a,string nam){age = a;name = nam;}void display() const;private:int age;string name;};void Student::display() const {cout<<“age:”<<age<<endl;cout<<“name:”<<name<<endl;}int main(){const Student st1(5,”lili”);st1.display();return 0;}

分别在display函数的声明和定义处增加了const关键字之后,通过编译并且运行正常。结果和预想的一样。const修饰的函数就是常成员函数。但是常成员函数依然无法更改常对象中的数据成员的值。测试代码如下:

;class Student{public:Student(int a,string nam){age = a;age = 1;name = nam;}void display() const;private:int age;string name;};void Student::display() const{// age = 1;cout<<“age:”<<age<<endl;cout<<“name:”<<name<<endl;}int main(){const Student st1(5,”lili”);st1.display();return 0;}

运行结果:

main函数中定义了常对象,但是在常对象的构造函数中可以修改常对象的成员变量,并且运行结果如上图,表明已经修改成功。但是当把注释的那一样代码取消注释,则编译出错!说明常成员函数可以访问常对象的数据成员,但是不允许修改常对象中的数据成员的值。 如果非要修改数据成员的值,则可以把数据成员声明为mutable,实例如下:

;class Student{public:Student(int a,string nam){age = a;name = nam;}void display() const;private:mutable int age;string name;};void Student::display() const{age = 1;cout<<“age:”<<age<<endl;cout<<“name:”<<name<<endl;}int main(){const Student st1(5,”lili”);st1.display();return 0;}怎么能研究出炸药呢?爱迪生不经历上千次的来自失败,怎么能发明电灯呢

C++中const关键字用法详解及实例和源码下载(一)

相关文章:

你感兴趣的文章:

标签云: