以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 使用C++时应注意的几个小问题[转帖] (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=43781) |
-- 作者:longshentailang -- 发布时间:3/9/2007 5:19:00 PM -- 使用C++时应注意的几个小问题[转帖] 关键字class与struct差别: 我们知道在C++中定义类,关键字class和struct是等效的,但是在类定义中采用默认访问权限的方式声明成员函数/变量时,你会发现两者还是有所差别的,如下表: 关键字mutable的用法: mutable关键字似乎并不被经常使用,笔者也是在无意间才知道的,下面说一下它的用法。 mutable的作用是用来修饰类的成员变量,使这个成员变量的值在任何情况下都可以被修改,例如: 为叙述方便,预定义一个类TObject,如下: class TObject 情况1: 我们知道,若TObject中存在一个成员函数,并且次函数的声明末尾加上了const关键字,形式如下: void setValue(int) const; // 注:有些地方把这种函数称为常函数。 那么这就意味着,这个函数的实现中不能修改该类的成员变量的值,但是,倘若我们要记录这个函数调用的次数,我们会有很多方法,如间接调用该函数,但是这显然不是一个好方法,这会增加类的复杂度。这个时候mutable就派上用场了,它可以使被修饰的成员变量在该种情况下被改变,你可以这样书写代码: class TObject 当然,这并不是一个好例子,因为它没有多少实用价值,我的目的在于说明问题。 情况2: 若有一个TObject的实例被定义为常量,如: const TObject tObject; // 注:有些地方将之称为常对象。 如果没有mutable的话,这显然意味着你将无法修改该对象,那么,如果你只希望关闭掉部分成员变量的修改权,那么你就应该像情况1那么书写代码,让你调用setValue成员函数时仍能修改iValue的值。 关键字static在类成员函数/变量中的使用方法: 修饰成员变量,示例代码如下: class TObject 其中iValue被声明为静态成员变量,这就意味着这个变量被所有这个类的实例所共享,并且不能被非static修饰的成员函数修改,对此例来讲, setValue(int)是不能修改iValue的值的,对静态变量初始化也需要特殊的语法,对此例要在源文件(*.cpp)中这么写: int TObject::iValue = 0; 调用方法有两种: int iValue = TObject::iValue; 或 TObject tObj; 修饰成员函数,示例代码如下: class TObject 这个函数既可以修改该类的静态变量,也可以修改普通变量,但是需要格外注意的是,在这个函数的实现中不能出现this关键字,因为它不对类的实例作用。 调用方法有两种: TObject::SetValue(*new TObject); 或 TObject tObj; |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
31.250ms |