1.静态成员

(1)由keywordstatic修饰

静态变量定义语句在编译阶段就运行,运行过程中不再运行。

(2)分类:静态数据成员、静态成员函数。

(3)静态成员时类的全部对象共享的成员,而不是某一个对象的成员。

2.静态成员的使用

(1)在定义说明前加上statickeyword。比如:

static int x;

(2)静态数据成员必须进行初始化,而且初始化必须在类外完毕。

(3)静态数据成员的初始化

数据类型 类名::静态数据成员名 = 值。//注意这里没有static出现

(4)绝对不能使用对象名来使用静态数据成员,再次强调静态数据成员是属于整个类公有,而非某一个对象。

对象名.静态成员名  //错误

(5)正确的使用方式

类名::静态数据成员

(6)假设静态数据成员的訪问权限同意,才干够在类外訪问。

3.静态数据成员举例

#include <iostream.h>



class Tc

{

  int i;

  static int k;

public:

  Tc()

  {

    i = 0;

    i ++;

    k ++;

  }

  void display()

  {

    cout<<"i = "<<i<<", k = "<<k<<endl;

  }

};

int Tc::k = 0;

int main()

{

  Tc A, B;

  A.display();

  B.display();

}

输出结果:

i = 1, k = 2

i = 1, k = 2



若改为:

Tc::Tc()

{

  i = 0;

  i ++;

  Tc::k++;//这个地方的Tc::能够省略

}

4.类的静态成员函数

(1)类的静态成员函数属于类而不是属于对象。

(2)类的静态成员函数视线中不可直接使用非静态成员,可是能够直接使用静态成员。

(3)若在静态成员函数中引用非静态成员,必须加对象名(静态成员函数接收參数然后通过參数来调用)。

5.补充

Test t1(t2); //调用拷贝构造函数

Test t1(5);  //调用构造函数

6.找出下面代码片段中的错误并分析原因。

class myclass

{

public:

    static void fun();

private:

    static int global;

};

void myclass::fun()

{

    global = 100;

}

分析:错误出在将类的静态成员放在函数中初始化,正确的初始化方法是放在类外且在函数外完毕。

class myclass

{

public:

    static void fun(myclass my);

private:

    int global;

};

void myclass::fun()

{

    cout<<global;

}

分析:错误出在两个地方,第一个地方,函数的定义和使用上出现了參数上的不一致;第二个地方类的静态成员函数能够引用静态数据成员,但对于非静态数据成员的引用必须通过对象来完毕。

补充:

(1)全局变量中不出现static修饰,static要么出如今类内要么出如今函数内。

(2)引用对象时。类的对象必须先完毕初始化。

C++语言笔记系列之十——静态成员的更多相关文章

  1. C++语言笔记系列之十二——C++的继承

    C++的继承 1.继承方式 public(公有继承) 派生类中的成员能够訪问基类的public成员和protected成员,但不能訪问基类的private成员. 派生类的对象仅仅能訪问基类的publi ...

  2. C++语言笔记系列之十六——赋值兼容规则&amp;多继承的二义性

    1.赋值兼容规则 (1)派生类对象能够给基类对象赋值,这样的情况下派生类对象将从基类继承的成员的值赋值给一个基类对象:可是不同意将一个基类的对象赋值给一个派生类. (2)能够将派生类对象的地址赋给基类 ...

  3. C++语言笔记系列之十八——虚函数(1)

    1.C++中的多态 (1)多态性:同一个函数的调用能够进行不同的操作,函数重载是实现多态的一种手段. (2)联编:在编译阶段进行联接.即是在编译阶段将一个函数的调用点和函数的定义点联接起来. A.静态 ...

  4. C++语言笔记系列之二十——模版

    1.随意输入两个数x和y,输出最大值max. int max(int x, int y) {return x>y? x:y;} 2.函数模版 (1)用一种或者多种通用类型去表示函数--函数模版. ...

  5. C++语言笔记系列之十三——派生类构造函数的调用

    1.派生类构造函数的调用 (1)一个基类的全部数据成员均被派生类继承.创建一个派生类对象时.系统在为派生类对象分配单元时一定要为其基类数据成员分配子空间. (2)一个派生类对象在创建时不仅要调用派生类 ...

  6. C语言学习系列笔记

    1.小甲鱼 C语言教程系列

  7. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  8. Dynamic CRM 2015学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2015学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址:Dynamic CRM 2015学习笔记 系列汇总 一 ...

  9. Hadoop学习笔记系列文章导航

    一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...

随机推荐

  1. 关于目标检测 Object detection

    NO1.目标检测 (分类+定位) 目标检测(Object Detection)是图像分类的延伸,除了分类任务,还要给定多个检测目标的坐标位置.      NO2.目标检测的发展 R-CNN是最早基于C ...

  2. eclipse的springMVC环境搭建并输出HelloWorld

    spring简单介绍:https://www.cnblogs.com/package-java/p/10368672.html 1.创建一个Maven Project项目 点击下一步 点击下一步 2. ...

  3. qume-kvm 命令管理

    sudo /etc/init.d/acpid start 安装管理包工具 sudo apt install libguestfs-tools [ qemu-kvm qemu-kvm-tools vir ...

  4. iview中单击行,使得checkbox状态的方法

    直接贴代码,这是一组jquery全选,全不选,反选代码 <!DOCTYPE html> <html lang="en"> <head> < ...

  5. python基础4(小数据池,编码,深浅拷贝)

    1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num ...

  6. John Morgan:黎曼几何、曲率、Ricci流以及在三维流形上的应用二讲

    本文是笔者在线看Lektorium上John Morgan在圣彼得堡国立大学欧拉研究所的讲座做的笔记.第一讲以如下内容组成 1. 黎曼曲面上的联络 黎曼流形$(M^n,g)$中,$M$为$n$维流形, ...

  7. URL长链接转换为短链接

    URL长链接转换为段链接的工具非常多,可是.小编还是要给大家唠一种方法的: 操作过程例如以下,打开腾讯微博或者其它微,将自己的URL地址值按图片操作:

  8. Seq和Ack

    http://blog.csdn.net/bytebai/article/details/21752925 握手阶段: 序号    方向         seq           ack1  A-& ...

  9. hdoj--5567--sequence1(水题)

    sequence1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  10. Filenames and paths

    Files are organized into directories (also called ‘folders’). Every running program has a ‘current d ...