C++语言中的 静态类型员 用法

原创 2015年11月19日 17:06:22

本人是新手。前几天专门学习了一下C++的静态类成员,在此总结一下C++静态类成员的用法。

一、类静态数据成员

1.为啥用类静态成员?

有时候在设计类类型的时候,需要该类的所有对象都访问一个全局对象。比如计算在程序中创建的类对象个数,或者共同拥有的一个值。这个时候,提供一个共同使用的全局对象比每个类对象维持一个独立的成员 更加有效。

类静态成员被当做该类类型的全局对象。即该类中静态数据成员只有一份。[静态数据成员没有进入程序的全局名字空间,而处理该类的类域中]。

2.类静态成员定义以及初始化

在类数据成员的声明前加上关键字 static即被声明为类的静态数据成员。

一般情况下,类静态成员在该类定义之外被初始化。初始化的时候,必须被类名限定修饰。例如 int MyTest::m_static = 1;//MyTest为类名

在程序中,类静态成员在程序中只能提供一个定义。因此类静态成员的初始化不能放在头文件中。一般我们放置实现的c文件中。作为特殊的。有序型的const静态数据成员可以在类体中用一常量值初始化。例如

//MyTest.h

class MyTest{

//...

private:

static const int size = 16;

static const char name[size];

};

//MyTest.c

const int MyTest::size; //定义

const charMyTest::name[size] = "this is test!";

在上述的例子中,int型为有序型,可以直接在类体中初始化,但是还是必须在实现文件中定义。

name是一个数组,不是有序型,因此不能在类体中初始化,必须在实现文件中初始化并定义。

3.类静态数据成员的访问。

类静态成员的访问有以下两种:

A.在类成员函数中,可以直接访问该类的静态成员

B.在非成员函数中,可以通过成员访问操作符或者类名限定修饰的名字直接访问它。

4.类静态数据成员的其他用法

A.类静态成员的类型可以为其所属类。如同非静态数据成员声明为该类对象的指针或者引用。例如

class Mytest{

//...

private:

static Mytest m_static_mem;

Mytest *m_pMem;

};

B.类的静态数据成员可以为类成员函数的缺省实参。

二、静态成员函数

类体中静态成员函数声明 为普通成员函数的前面加关键字static。此外静态数据成员声明不能用const,volatile修饰。

类体外静态数据成员的定义不能在前面加关键字 static

静态成员函数的调用与类的静态数据成员基本一样。

区别于普通的成员函数,静态成员函数没有this指针,因此访问了非静态数据成员的成员函数都不能声明为静态成员函数。

一般我们实现静态成员函数都是为了方便与对类的静态数据成员进行操作。



有错误之处,还请指出。谢谢!







版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

强弱类型,动态静态语言比较(JAVA,C,C++,Python,Ruby,PHP,Perl)

Perl、PHP、Python、Java和Ruby的比较(另附几种解释语言语法法比较) 提问 ◆ Perl、Python、Ruby和PHP各自有何特点? ◆ 为什么动态语言多作为...

C++类静态成员的初始化和用法探讨

C++类静态成员的初始化和用法探讨

C语言基本数据类型:整型(int)用法详解

1. 整型int    C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负。int是整型之一,一般被称为整型。以后,在不产生歧义的情况下,我们把整数类型和in...

C++静态类型总结[百度文库文档]

前言   本文只是本人对C++中关于静态类型的一个总结,如错误之处,请大家帮我改正。我分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明s...
  • dscyw
  • dscyw
  • 2013-04-02 10:46
  • 647

C++中RTTI动态类型识别、静态成员、变量的四种存储方式

本文主要来讲解C++中的RTTI机制,也就是动态类型识别技术,之前我在学习《C++编程思想》的时候学习过这个技术,现在也算是复习一下吧,因为RTTI在MFC程序设计中也是有一定用处的。 先来看一段程序...

C/C++ const类型用法总结

const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令  **************常量必须被初始化************************* cons...

C++的4个类型转换运算符的用法介绍

注:一直在用dynamic_cast做指针的智能转换,今天突然又发现了static_cast这个转换符,不知道神马意思,小小的汗一下,下面这篇系统介绍4个类型转换符的文章来自其他网站,学习下。   ...

标准C++中string类型的用法总结

标准C++中string类型的用法总结 who1753编程笔记围观921次暂无评论 要想使用标准C++中string类型,必须要包含 ...
  • anlun
  • anlun
  • 2014-12-28 10:45
  • 334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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