当前位置:  编程技术>c/c++/嵌入式

C++中的常对象与常对象成员详解

    来源: 互联网  发布时间:2014-10-21

    本文导语:  常对象 常对象必须在定义对象时就指定对象为常对象。 常对象中的数据成员为常变量且必须要有初始值,如 代码如下:Time const t1(12,34,36); //定义t1为常对象这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修...

常对象

常对象必须在定义对象时就指定对象为常对象。

常对象中的数据成员为常变量且必须要有初始值,如

代码如下:

Time const t1(12,34,36); //定义t1为常对象

这样的话,在所有的场合中,对象t1中的所有数据成员的值都不能被修改。凡希望保证数据成员不被改变的对象,可以声明为常对象。

定义常对象的一般形式为

类名    const    对象名(实参列表);

也可以把const写在最左面

const    类名    对象名(实参列表);

二者等价

如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式构造函数和析构函数)。

否则就会报错

这样做是为了方式非const型的成员函数修改常对象中的数据成员的值,因为const型的成员函数是不可以修改对象中的数据成员的值的(这个后面还会说到)。

那么,怎样才能引用常变量中的数据成员呢?很简单,我们只需要将该成员函数声明称const型的成员函数(常成员函数)即可。

代码如下:

void Print() const;

常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。

有时在编程时有要求,一定要修改常对象成员中的某个数据成员的值(例如类中有一个用于计数的变量count,其值应当不能变化),

对该数据成员声明为mutable,如

代码如下:

mutable int count;//定义一个在常对象中可以被改变的数据成员

把count声明为可变的数据成员,这样就可以用声明为const的成员函数来修改它的值。

=========================一个简单的示例程序1.1====================================

代码如下:

#include
using namespace std;
class Student
{
 public:
  Student(int n,float s):num(n),score(s){}
  void change(int n,float s) const{num=n;score=s;}
  void display() const{cout

    
 
 

您可能感兴趣的文章:

  • c++类对象初始化方式
  • C++对象池 C++ ResourcePool
  • c++类对象数组初始化方式
  • C++远程对象访问框架 ROXS
  • C++对象模拟测试 Turtle
  • C++里能不能在指定的一块内存中创建对象的实例?
  • C++中指向对象的常指针与指向常对象的指针详解
  • C++函数返回值为对象时,构造析构函数的执行细节
  • C++实现动态分配const对象实例
  • C++常对象精讲_const关键字的用法
  • 请教高手,C++返回类对象引用问题
  • 解析c++中参数对象与局部对象的析构顺序的详解
  • C++用new创建对象和不用new创建对象的区别解析
  • C++中的对象数组详细解析
  • C++内核对象封装单实例启动程序的类
  • C++中四种对象生存期和作用域以及static的用法总结分析
  • C++中对象的常引用总结
  • C++临时性对象的生命周期详细解析
  • 深入c++中临时对象的析构时机的详解
  • C++中的函数指针与函数对象的总结
  • C++对象的动态建立与释放详解
  • 深入JAVA对象深度克隆的详解
  • Python对象的深拷贝和浅拷贝详解
  • php 对象克隆clone实例详解
  • 基于序列化存取实现java对象深度克隆的方法详解
  • java教程之对象序列化使用基础示例详解
  • 探讨:使用httpClient在客户端与服务器端传输对象参数的详解
  • C#面向对象特征的具体实现及作用详解
  • c字符串,string对象,字符串字面值的区别详解
  • 深入理解Android组件间通信机制对面向对象特性的影响详解
  • c#对象反序列化与对象序列化示例详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • jquery对象和javascript对象即DOM对象相互转换
  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • 请问如何把StringBuffer 的对象转化成一个InputStream 的对象,或者InputStream 子类的对象也可以!
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • 判断一个对象是否为jquery对象的方法
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • Glib对象系统(也称为"GObject")内部是如何实现面向对象特征的呢?
  • 将ResultSet结果集中的记录映射到Map对象中
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • php 5.5.14数据对象(PDO)介绍及PDO的预定义常量介绍
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • 重新编译PLSQL中的无效对象或者指定的对象 的方法
  • jquey笔记之dom对象与jquery对象互换的例子
  • 有人问我:何为面向对象编程?我给不出确切或形象的说法。谢!vb、pb等开发工具是不是面向对象编程的语言。
  • 写一个方法,向它传递一个对象,循环打印出对象层次结构中的所有类?thinking in java里面的一个习题不知道如何做请教高手?
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • 我的APPLET在Jbuilder5中,可以调用EJB对象,但是移植到网页上却不能调用EJB对象!是何缘故,值得研究!
  • 各位高手知道在JAVA中如何用一个名称创建一个对象实例,并调用其方法,注意:在编写代码时并不知要创建的对象的类名,也并不知方法名
  • 1. 请问linux下可以使用“typedef list<对象*> 对象列表名 ”和iterator吗?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3