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. Python的那些坑--------括号篇

    在Python中遇见了带不带括号的问题,我目前的是这三种,有问题请指出.如果有其他的,我后续会更新 一  函数带不带括号: def a(x): return x print(a) #不带括号调用的结果 ...

  2. BZOJ 5254 [Fjwc2018]红绿灯 (线段树)

    题目大意:一个wly从家走到学校要经过n个红绿灯,绿灯持续时间是$g$,红灯是$r$,所有红绿灯同时变红变绿,交通规则和现实中一样,不能抢红灯,两个红绿灯之间道路的长度是$di$,一共$Q$个询问,求 ...

  3. Linux 操作基础(一) -- Shell 命令格式和元字符

    1 命令格式 cmd [-选项] [参数] 说明: • 最简单的Shell命令只有命令名,复杂的Shell命令可以有多个选项和参数 • 参数是文件也可以是目录,有些命令必须使用多个操作对象 • 并非所 ...

  4. pandas学习笔记 - 常见的数据处理方式

    1.缺失值处理 - 拉格朗日插值法 input_file数据文件内容(存在部分缺失值): from scipy.interpolate import lagrange import pandas as ...

  5. drupal7 怎样将一个date字段加入上日期插件效果

    //这里以created字段为样例 function Hook_form_alter($form,$form_state,$form_id){ $form['created']['#type'] = ...

  6. Sql中把datetime转换成字符串(CONVERT)

    一.回想一下CONVERT()的语法格式: CONVERT (<data_ type>[ length ], <expression> [, style]) 二.这里注重说明一 ...

  7. bzoj1433: [ZJOI2009]假期的宿舍(最大二分图匹配)

    1433: [ZJOI2009]假期的宿舍 题目:传送门 题解: 这题有点水 跑个二分图匹配就完事了(注意在校生不是一定都互相认识) 代码: #include<cstdio> #inclu ...

  8. BZOJ 3123 主席树 启发式合并

    思路: 主席树 搞树上的k大 x+y-lca(x,y)-fa(lca(x,y)) 按照size小树往大树上插 启发式合并 n*log^2n的 搞定~ //By SiriusRen #include & ...

  9. Codeforces 708D 费用流 (呃我们的考试题)

    NB的题目背景 输入输出一样 考试的时候貌似只有gzz一个人搞出来了 %gzz 思路: 分情况讨论 add(x,y,C,E) C是费用 E是流量 1. f>c add(x,y,2,inf),ad ...

  10. ScrollView嵌套GridView不显示顶部

    /*     * scrollView中嵌套GridView不能显示头部     *      * 方案①:scrollView.smoothScrollTo(0, 0);     *      * ...