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

紧接着上一篇博文的内容继续讲述C++中关于const关键字的用法。 上一篇博文地址:C++中const关键字用法详解及实例和源码下载(一)

上一篇讲述了常变量和常对象的用法。这一篇给大家讲述类中常数据成员和常成员函数的用法。

常数据成员 代码如下:;class Teacher{public:Teacher(int,string);void display();private:const string name;int age;};Teacher::Teacher(int a,string nam){age = a;name = nam;}void Teacher::display(){cout<<“age=”<<age<<“,name=”<<name<<endl;}int main(){Teacher stu(20,”lili”);stu.display();return 0;}

代码中定义name字段为常数据成员,通过构造器定义对象,但是编译出错了!如图:

说明常数据成员不能通过构造器赋值,那么如何赋值呢?可不可以定义常数据成员的时候就进行赋值呢? 来看下面的代码:

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

尝试通过默认构造函数调用display函数获取成员变量,但是还是编译失败,说明对于常成员变量定义的时候进行赋值也是不可以的。只能通过构造函数的参数初始化表对常数据成员进行初始化。代码更改如下;

;class Teacher{public:Teacher();Teacher(int a,string nam);void display();private:const string name;int age;};Teacher::Teacher(int a,string nam):name(nam){age = a;}void Teacher::display(){cout<<“age=”<<age<<“,name=”<<name<<endl;}int main(){Teacher stu(20,”llll”);stu.display();return 0;}

结果:

看到这里大家应该明白了类的常数据成员的赋值方法了吧。比较单一,只能通过构造函数的参数初始化表堆常数据成员进行初始化。

常成员函数 代码如下:;class Monitor{public:Monitor(int,string);void display() const;private:string name;int age;};Monitor::Monitor(int a,string nam){age = a;name = nam;}void Monitor::display() const{cout<<“age=”<<age<<“,name=”<<name<<endl;}int main(){Monitor tea(12,”dd”);tea.display();return 0;}

在函数的声明和定义中使用const修饰即可,使得该函数为常成员函数。上一篇博文中提到,常成员函数只能访问常对象中的数据成员,不能修改常对象中的数据成员的值,如果需要修改,则对该数据成员声明为mutable,为可变数据成员。在此不再给出实例,,请参考上一篇博文的讲述。 在实例代码中,常成员函数引用非const修饰的数据成员,当然它也可以引用const修饰的数据成员。 总结如下:常成员函数可以引用const数据成员和非const数据成员。const数据成员可以被const成员函数和非const成员函数引用。

下面再来看一段代码:

;class Monitor{public:Monitor(int,string);void display() const;void setAge(int);private:string name;int age;};Monitor::Monitor(int a,string nam){age = a;name = nam;}void Monitor::setAge(int a){age = a;}void Monitor::display() const{cout<<“age=”<<age<<“,name=”<<name<<endl;}int main(){Monitor tea(12,”dd”);tea.display();tea.setAge(15);tea.display();return 0;}

结果:

运行正常。 然后把代码修改如下:

;class Monitor{public:Monitor(int,string);void display() const;void setAge(int);private:string name;int age;};Monitor::Monitor(int a,string nam){age = a;name = nam;}void Monitor::setAge(int a){age = a;}void Monitor::display() const{setAge(15);cout<<“age=”<<age<<“,name=”<<name<<endl;}int main(){Monitor tea(12,”dd”);tea.display();return 0;}

编译就会出错了! 原因在于const常成员函数不能调用非const成员函数。

我想有一天和你去旅行。去那没有去过的地方,

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

相关文章:

你感兴趣的文章:

标签云: