静态成员

即定义出一些成员与类本身直接相关,而不是与类的各个对象保持关联。

1,声明静态成员

在成员的声明之前加上关键字static使得其与类关联在一起

class Test
{
public:
    Test(int a) :a(a){}
    void add()
    {
        b++;
    }
    static void show()      //静态成员函数
    {
        cout << b << endl;;
    }
private:
    int a;
    static int b;      //静态成员
};

2,使用类的静态成员

  • 使用作用域直接访问
  • 用类的对象访问
  • 用类的指针访问

Test x, *y=&x;
    x.show();         //类对象
    y->show();             //类指针
    Test::show();             //作用域

3,定义静态成员

因为静态成员不属于类的任何一个对象,所以它并不是在创建类的对象时被定义的。这意味着它们并不是由类的构造函数初始化的。而且,一般来说不能在类内初始化静态成员。相反只能在外部定义和初始化每个静态成员。

4,静态成员的类内初始化

通常情况下,不能类内初始化,但是可以为静态成员提供const整数类型的类内初始值。不过要求静态成员必须是字面值常量类型的constexpr。

constexpr static double rate = 6.5;     //如果不是const int类型则需要加上constexpr来声明是常量表达式
    static const int vecSize = 20;

5,静态成员能用于某些场景,而普通函数不能

因为静态成员独立于任何对象。因此某些非静态数据成员可能非法的场合,静态成员却可以正常使用。

class Test1
{
private:
    static Test1 a;      //静态成员可以是不完全类型
    Test1 *b;          //指针可以是不完全类型
    //Test1 c;       错误,数据成员必须是完全类型   
}

静态成员函数

可以通过类名加范围解析运算符 :: 的方式访问,。

静态成员函数特点:只能访问静态成员数据其他静态成员函数类外部的其他函数

因为静态成员函数也是属于类,并不是属于某一个对象,所以其中不包含 this 指针。因此不能访问非静态数据成员

静态成员函数与普通成员函数的区别:

  • 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。
  • 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针。
#include<iostream>
using namespace std;class Test
{
public:Test(int a) :a(a){ b++; }void show1(){cout << a << "    " << b << endl;}static void show2(){//cout << a << endl;     不能访问类的非静态成员cout << b << endl;}
private:int a;static int b;
};
int Test::b = 0;int main()
{Test x(10);x.show1();Test y(20);x.show1();system("pause");return 0;
}

运行结果:

10    1
10    2

a是非静态成员,所以属于对象x自己,所以当新定义y对象后,x的a值仍然不变:

b是静态成员,属于类,所以只要b变,则所有对象访问b的时候,值都会发生变化;

类的静态成员与静态成员函数相关推荐

  1. C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)

    1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...

  2. c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数

    目录 4.2.7 类对象作为类成员 4.2.8 静态成员 相关教程 4.2.7 类对象作为类成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员. 例如: class A {} cla ...

  3. C++ 类的静态成员及静态成员函数

    https://www.cnblogs.com/codingmengmeng/p/5906282.html C++ 类的静态成员及静态成员函数 对象与对象之间的成员变量是相互独立的.要想共用数据,则需 ...

  4. 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户类中增加一个静态成员变量(年利率),并增加如下成员函数:(1)计算月利息月利息=存款金额x年利率+12(2)更改利率(静态方法)

    实验二:继承和派生程序设计(4学时)必做题: 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户类中增加一个静态成员变量(年利率),并增加如下成员函数:(1)计算月利息 月利息=存 ...

  5. c++静态成员变量成员函数

    c++面向对象模型初探 前言 静态成员变量 定义静态成员变量 使用静态成员变量 静态成员函数 概念 案例 疑难问题:静态成员函数中,不能使用普通变量. 前言 思考:每个变量,拥有属性.有没有一些属性, ...

  6. c++,static 静态成员变量 / 静态成员函数

    静态成员变量: //静态成员变量(static) // //1.如果想在同类的多个对象之间实现数据共享 ,可以用静态 //成员变量,即用static修饰的成员变量,例 static int a; // ...

  7. 静态成员函数与成员变量_C++静态成员变量及函数

    没有很快乐,也没有不快乐,好像不该这样,但也只能这样,成长也许如此,行于奔溃边缘又慢慢自愈吧... ----  网易云热评 一.静态成员变量 1.普通成员变量属于对象,每个对象都会包含一份独立的普通成 ...

  8. C++ 静态成员变量静态成员函数

    static修饰的就是静态的成员函数或者静态成员变量,管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享.也就是说所有的对象的该静态变量和函数都指向同一块内存区域. # ...

  9. 静态成员与静态成员函数

    /*#include<iostream.h> class X { public:  X(){}//为什么不能缺省,a,b调用默认的构造函数呢?  static int s;//静态数据成员 ...

最新文章

  1. 如何衡量一个项目的交付质量???
  2. python小游戏开发,使用python实现英语打字游戏
  3. python图片超链接_python自动获得网页上的所有超链接并全部截图
  4. MySQL Date 函数
  5. 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...
  6. php小程序码生成并保存,小程序中如何生成小程序码
  7. 邮箱附件、QQ、微信等社交工具大文件传输解决方案
  8. 系统内存分布及操作过程
  9. 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
  10. SpringBoot Redis缓存 @Cacheable、@CacheEvict、@CachePut
  11. Linux下 fio磁盘压测笔记
  12. bzoj3625:[Codeforces Round #250]小朋友和二叉树
  13. 震惊·X话最少的~“原理图更新到PCB时出现Unknown Pin: PinXXX 问题解决方案”
  14. 大学物理公式和名词整理
  15. 常用9款在线作图工具,总有一款适合你!
  16. 什么是URL?URL是什么意思?
  17. 常用分辨率设置,RGB与CMYK_几何途行_新浪博客
  18. 【vue】v-html中的内容修改样式,图片修改尺寸
  19. 摩羯男喜欢你的一些表现
  20. 使用HMC管理powerlinux

热门文章

  1. DNA 4. SCI 文章中基因组的突变信号(maftools)
  2. 全栈工程师眼中的HTTP
  3. 台式如何看计算机配置,电脑组装教程:怎么看电脑配置?教你如何查看电脑配置...
  4. 中学信息技术教师资格证编程题
  5. 元宇宙中国江湖进化录
  6. 运维企业实战——RHCS集群套件 实现高可用
  7. UEFIwindows8.1 + ubuntu 双系统安装
  8. 《禁闭岛》与脑前额叶,从白痴到天才看人类的认知
  9. SONY Xperia SP M35 解锁后重新上锁
  10. android最新版本9.1,微信9.1.0版本