C++中的常对象、常数据成员和常成…

原创 2013年12月02日 15:34:10
1、常对象
在定义对象是=时,我们可以将对象定义为常对象。常对象中的数据成员为常变量且必须要有初值。例如:Person const p('M')。一旦声明可常对象那么常对象中的所有数据成员的值都不能被修改。所以希望保证数据成员的不被改变的对象,我们都可将其声明为常对象。
定义常对象的格式:类名 const 对象名(实参列表){}  或const 类名 对象名(实参列表){}
需要注意的是:一个对象一旦被声明为常对象,那么该对象就不能调用非const的成员函数(除了油系统自动调用的隐式的构造函数和析构函数)。
总之一旦使用关键字const修饰成员函数,成员对象,一般情况下我们是不可以对数据成员进行修改,但是在是实际编程中我们确实要修改里面的值,比如我们声明了一个用于计数的变量count,这个值是需要不断变化的,这时我们只需将要修改的数据成员声明时在其前添加一个关键字:mutable即可:
如mutable int count;这样声明其实是将count声明为可变的数据成员,这样我们就可以使用const的成员函数对其值进行修改。同时count也可以在构造函数中进行初始化。

2、常数据成员声明
常数据成员的声明与一般数据成员的=声明类似,而区别在在于在一般数据成员的声明前面加上以const关键字。常数据成员一旦声明并赋予初值,它的值是不能改变的。而且需要注意的是:常数据成员的智能通过构造函数的参数初始化列表对常数据成员进行初始化。
格式:const 数据类型 变量名;
下面的初始化是非法的在编译时是不会通过的:
const char name;
Person::Person(char n){name = b;}
其编译不会通过的原因是:因为常数据成员是不能被赋值的。
合法的初始化方式是:
const char name;
Person::Person(char n):name(n){}
3、常数据函数
常数据成员只能被常成员函数访问,但是常成员函数不能改变其值。
声明常成员函数格式:数据类型 函数名 const{ }
下面是声明常成员函数,并且使用常成员函数获取常数据成员:
char GetName() const{return name;}
4、一个类中既有常数据成员又有非常数据成员
当一个类中既有常数据成员又有非常数据成员时,不可在构造在构造函数中同时对二者进行初始化。这时对两个数据成员进行赋值时有所区别,因为常数据成员不能被赋值,所以在声明常数据成员之后对其初始化应在构造函数的参数初始化列表里进行,而非长数据成员可以通过定义函数改变其值。
访问:在访问二者时,可以在常成员函数中访问也可以在非成员函数中访问;
合法的访问:
void getData()   //成员函数访问数据成员和常数据成员
{cout<<"name"<<name<<endl;
 cout<<"age"<<age<<endl;
}
void getData()  const  //常成员函数访问常数据成员和数据成员
{cout<<"name"<<name<<endl;
 cout<<"age"<<age<<endl;
}
赋值:不可以在常成员函数中对数据成员进行赋值;可以在成员函数中对数据成员赋值。
非法的赋值方式:
void getData() const
{setAge(34);  //对age进行赋值
}

介绍了这么多,那什么时间使用常数据成员呢?
1.在一个类中,如果一些数据成员需要改变,而有一些数据成员不需要改变,这时就可以把不需要改变的数据成员声明为常数据成员
     2.当一个类中的所有数据成员的值都不允许改变,这时C++机制中为我们提供两种方法:将所有的数据成员声明为常数据成员;另一种方法就是将对象声明为常对象。
     误区:不要误以为常对象中的成员函数都是常成员函数,常对象的使用是保证数据成员的值不被修改。当常对象的成员函数未声明为const时,编译系统默认它是非const成员函数。
注意:常成员函数不能调用另一个非const成员函数。
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

C++常数据成员精讲—const关键字

用const修士的定义对象成为常对象;(两种声明方式) const Point point1( 10,10);//常量对象 Point const point2( 10,10);//常量对象用co...

C++常数据(函数)成员

C++常数据成员精讲—const关键字 内容提要: 用const修饰的定义对象称为常对象; 用const修饰的声明成员函数称为常成员函数; 用const修饰的声明数据成员称为常数据成员。 变...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

C++常数据成员精讲—const关键字

分类: c++2012-08-26 09:47 937人阅读 评论(0) 收藏 举报 c++systemclassc 用const修士的定义对象成为常对象;(两种声明方式) ...

C++常数据成员精讲—const关键字(引)

C++常数据成员精讲—const关键字更多内容:http://www.cctwl.com/ 内容提要: 用const修饰的定义对象称为常对象; 用const修饰的声明成员函数称为常成...

2013级C++第6周(春)项目——对象指针、const【项目1-体验常成员函数】

/* * 程序的版权和版本声明部分 * Copyright (c)2013, 在校学生 * All rightsreserved. * 文件名称: 项目1.cpp * 作 者:刘旺 * 完成日期...

C++找对象的季节——常成员函数(点和对称点)

又到了一周一次的发博文时间了,废话不多说,马上开始: #include #include using namespace std; class CPoint { private: doubl...

C++常对象及其成员

C++虽然采取了不少有效的措施(如设private保护)以增加数据的安全性,但是有些数据却往往是共享的,人们可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况...

定义const对象而产生的常数据成员与直接定义const数据成员在编译器编译时候的区别

《C++面向对象程序设计(第2版)》P92“const数据成员可以被非const的成员函数引用”与 “const对象不能被非const的普通成员函数引用”是否矛盾??《C++面向程序设计(第2版)》P...

C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟

一、对象数组的定义和初始化 1. 对象数组的创建方法:   //常量都是无名对象 1)类类型 数组名[元素个数]; 2)类类型 数组名[元素个数] = { 数组的初始化列表... }; 2. ...

C++中const的使用常对象和长对象成员

有关常对象和常对象成员 在c++编程中如果要让所编的程序更安全,就要用到一些保护机制。 常对象 即对象中的所有数据成员在引用时不能被改变的对象。定义如下: class Student{...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)