欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

详解C++编程中的静态成员与可变数据成员

时间:2021-05-26 08:13:28|栏目:C代码|点击:

静态成员
类可以包含静态成员数据和成员函数。当数据成员被声明为“静态”时,只会为类的所有对象保留一个数据副本。
静态数据成员不是给定的类类型的对象的一部分。因此,静态数据成员的声明不被视为一个定义。在类范围中声明数据成员,但在文件范围内执行定义。这些静态类成员具有外部链接。下面的示例阐释了这一点:

// static_data_members.cpp
class BufferedOutput
{
public:
  // Return number of bytes written by any object of this class.
  short BytesWritten()
  {
   return bytecount;
  }

  // Reset the counter.
  static void ResetCount()
  {
   bytecount = 0;
  }

  // Static member declaration.
  static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

在前面的代码中,该成员 bytecount 在类 BufferedOutput 中声明,但它必须在类声明的外部定义。
在不引用类类型的对象的情况下,可以引用静态数据成员。可以获取使用 BufferedOutput 对象编写的字节数,如下所示:

long nBytes = BufferedOutput::bytecount;

对于存在的静态成员,类类型的所有对象的存在则没有必要。还可以使用成员选择(. 和 ?C>)运算符访问静态成员。例如:

BufferedOutput Console;

long nBytes = Console.bytecount;

在前面的示例中,不会评估对对象(Console) 的引用;返回的值是静态对象 bytecount 的值。
静态数据成员遵循类成员访问规则,因此只允许类成员函数和友元拥有对静态数据成员的私有访问权限。


可变数据成员
此关键字只能应用于类的非静态和非常量数据成员。如果某个数据成员被声明为 mutable,则从 const 成员函数为此数据成员赋值是合法的。
语法

mutable member-variable-declaration;

备注
例如,以下代码在编译时不会出错,因为 m_accessCount 已声明为 mutable,因此可以由 GetFlag 修改,即使 GetFlag 是常量成员函数。

// mutable.cpp
class X
{
public:
  bool GetFlag() const
  {
   m_accessCount++;
   return m_flag;
  }
private:
  bool m_flag;
  mutable int m_accessCount;
};

int main()
{
}

上一篇:C语言与Lua之间的相互调用详解

栏    目:C代码

下一篇:C++ 17标准正式发布! 更简单地编写和维护代码

本文标题:详解C++编程中的静态成员与可变数据成员

本文地址:http://www.codeinn.net/misctech/129052.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有