类的静态成员与静态成员函数
静态成员
即定义出一些成员与类本身直接相关,而不是与类的各个对象保持关联。
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的时候,值都会发生变化;
类的静态成员与静态成员函数相关推荐
- C++ 笔记(18)— 类和对象(this 指针、指向类的指针、类静态成员变量和函数)
1. this 指针 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址. this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象. 友元函数没有 thi ...
- c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
目录 4.2.7 类对象作为类成员 4.2.8 静态成员 相关教程 4.2.7 类对象作为类成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员. 例如: class A {} cla ...
- C++ 类的静态成员及静态成员函数
https://www.cnblogs.com/codingmengmeng/p/5906282.html C++ 类的静态成员及静态成员函数 对象与对象之间的成员变量是相互独立的.要想共用数据,则需 ...
- 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户类中增加一个静态成员变量(年利率),并增加如下成员函数:(1)计算月利息月利息=存款金额x年利率+12(2)更改利率(静态方法)
实验二:继承和派生程序设计(4学时)必做题: 先设计一个基本账户类,再通过继承基本账户类设计一个储蓄账户类,储蓄账户类中增加一个静态成员变量(年利率),并增加如下成员函数:(1)计算月利息 月利息=存 ...
- c++静态成员变量成员函数
c++面向对象模型初探 前言 静态成员变量 定义静态成员变量 使用静态成员变量 静态成员函数 概念 案例 疑难问题:静态成员函数中,不能使用普通变量. 前言 思考:每个变量,拥有属性.有没有一些属性, ...
- c++,static 静态成员变量 / 静态成员函数
静态成员变量: //静态成员变量(static) // //1.如果想在同类的多个对象之间实现数据共享 ,可以用静态 //成员变量,即用static修饰的成员变量,例 static int a; // ...
- 静态成员函数与成员变量_C++静态成员变量及函数
没有很快乐,也没有不快乐,好像不该这样,但也只能这样,成长也许如此,行于奔溃边缘又慢慢自愈吧... ---- 网易云热评 一.静态成员变量 1.普通成员变量属于对象,每个对象都会包含一份独立的普通成 ...
- C++ 静态成员变量静态成员函数
static修饰的就是静态的成员函数或者静态成员变量,管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享.也就是说所有的对象的该静态变量和函数都指向同一块内存区域. # ...
- 静态成员与静态成员函数
/*#include<iostream.h> class X { public: X(){}//为什么不能缺省,a,b调用默认的构造函数呢? static int s;//静态数据成员 ...
最新文章
- 如何衡量一个项目的交付质量???
- python小游戏开发,使用python实现英语打字游戏
- python图片超链接_python自动获得网页上的所有超链接并全部截图
- MySQL Date 函数
- 微信小程序父级之间的传值_微信小程序自定义组件封装及父子间组件传值的方法...
- php小程序码生成并保存,小程序中如何生成小程序码
- 邮箱附件、QQ、微信等社交工具大文件传输解决方案
- 系统内存分布及操作过程
- 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
- SpringBoot Redis缓存 @Cacheable、@CacheEvict、@CachePut
- Linux下 fio磁盘压测笔记
- bzoj3625:[Codeforces Round #250]小朋友和二叉树
- 震惊·X话最少的~“原理图更新到PCB时出现Unknown Pin: PinXXX 问题解决方案”
- 大学物理公式和名词整理
- 常用9款在线作图工具,总有一款适合你!
- 什么是URL?URL是什么意思?
- 常用分辨率设置,RGB与CMYK_几何途行_新浪博客
- 【vue】v-html中的内容修改样式,图片修改尺寸
- 摩羯男喜欢你的一些表现
- 使用HMC管理powerlinux
热门文章
- DNA 4. SCI 文章中基因组的突变信号(maftools)
- 全栈工程师眼中的HTTP
- 台式如何看计算机配置,电脑组装教程:怎么看电脑配置?教你如何查看电脑配置...
- 中学信息技术教师资格证编程题
- 元宇宙中国江湖进化录
- 运维企业实战——RHCS集群套件 实现高可用
- UEFIwindows8.1 + ubuntu 双系统安装
- 《禁闭岛》与脑前额叶,从白痴到天才看人类的认知
- SONY Xperia SP M35 解锁后重新上锁
- android最新版本9.1,微信9.1.0版本