C和C++中static的用法

文章目录

  • C和C++中static的用法
    • 一、**C语言中**:
    • 二、**C++中**:
    • 三、**友元**:

一、C语言中

  1. static 修饰全局变量表示该变量只在本文件可用
  2. static修饰局部变量,使得局部变量的生命周期的延长至程序结束
  3. static修饰函数表示该函数只在本文件可用,不能被外部文件引用

二、C++中

  • static修饰类中成员变量与类中普通成员变量的区别
静态成员变量 普通成员变量
在类内声明时要加static修饰 不用加static
在类外进行定义初始化 在构造函数的初始化列表进行初始化
不属于某个具体的实例,为所有类对象所共享 每个类对象都包含所有普通成员变量
可以通过类名::静态成员变量或对象名.静态成员变量名进行访问 只能通过对象名.普通成员名进行访问
因为静态成员变量不属于某个具体实例,所以不影响类的大小(sizeof) 影响
存储位置在静态区 看在具体哪里创建
  • static修饰类中成员函数与类中普通成员函数的区别
静态成员函数 普通成员函数
不能访问普通成员变量,只能访问静态成员变量 既能访问普通成员变量,还能访问静态成员变量
因为没有隐藏的this指针,所以不能用const修饰函数 有this指针,可以根据情况用const修饰函数
可以通过类名::静态成员函数或对象名.静态成员函数名进行调用 只能通过对象名.静态成员函数名进行调用
静态成员函数只能调用静态成员函数,不能调用非静态成员函数 非静态成员函数既可以调用非静态成员函数也可以调用静态成员函数

三、友元

  • (一)、 友元函数:
  1. 友元函数提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装。
  2. 问题:对于重载cout、cint
友元函数的特点
必须重载为全局函数
第一个参数必须为ostream&,第二个参数必须为类类型对象的引用
必须有返回值,方便连续输入输出
尽量不要在重载函数内部进行格式化操作(换行)
其可以直接访问类的所有成员,包括私有成员
友元函数不属于任何类,但要在类的内部任何地方进行声明,并加上friend关键字,不受任何类访问限定符限制,
友元函数不能用const修饰,
一个友元函数可以是多个类的友元函数
  • (二)、友元类:
  • 友元类的特点:友元关系是单项的,不能继承,不能交换,不能传递
class Date
{public:Date(){}Date(int year, int month, int day):_year(year),_month(month),_day(day)//,count(10)//会报错{}void Show(){cout << _year << '-' << _month << '-' << _day << endl;}static int GetCount(){return count;}
private:int _year;int _month;int _day;static int count;//类内部进行声明生
};
int Date::count = 10;//类外进行定义初始化int main()
{Date a;a.Show();Date b(2019, 10, 19);b.Show();cout << a.GetCount() << endl;//可以通过类名或对象名访问静态成员函数cout << Date::GetCount() << endl;system("pause");return 0;
}

C和C++中static的用法及友元相关推荐

  1. 【C++】C/C++ 中 static 的用法全局变量与局部变量

    C/C++ 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C++ 中static的作用 2.1 总的 ...

  2. C/C++中static的用法全局变量与局部变量

    转载自C/C++中static的用法全局变量与局部变量 1.什么是static? static 是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性. 1.1static的引入 我们知道在 ...

  3. java中static的用法_Java类中static的用法

    关于Java中static的使用有以下四种情况: 1.静态成员变量        被static修饰的成员变量,叫静态成员变量或类变量:没有被static修饰的变量,叫实例变量. 两者的区别是: 静态 ...

  4. c++中static的用法详解

    C 语言的 static 关键字有三种(具体来说是两种)用途: 1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数. 下面展示一些 内联代码片. int foo(){static ...

  5. C/C++中static关键字用法汇总

    1. 函数内static局部变量:变量在程序初始化时被分配,直到程序退出前才被释放,也就是static是按照程序的生命周期来分配释放变量的,而不是变量自己的生命周期.多次调用,仅需一次初始化. 2. ...

  6. C++中static关键字用法

    原文参考:https://zhuanlan.zhihu.com/p/347930016 1.面向过程设计中的static 1.1静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一 ...

  7. java中static的用法

    static变量有点类似于C中的全局变量的概念.值得探讨的是静态变量的初始化问题.拿以下程序为例 class Value{ static int c=0; Value(){ c=15; } Value ...

  8. Java中static final用法小结

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...

  9. 我的秋招之路之c++中static的用法

    c++的内存分布如上图所示. 对于一个完整的程序,在内存中的分布情况如下图:   1.栈区: 由编译器自动分配释放,像局部变量,函数参数,都是在栈区.会随着作用于退出而释放空间. 3.堆区:程序员分配 ...

最新文章

  1. 关于File.separator 文件路径:wind与linux下路径问题 .
  2. zbrush 添加纹理贴图_zbrush零基础新手必看入门讲解
  3. python开发的一些tips
  4. 机器学习09支持向量机
  5. LeetCode MySQL 1454. 活跃用户(连续dense_rank排名函数)
  6. mysql堆溢出_为什么这个MySQL触发器会导致堆栈溢出?
  7. Python 爬取张国荣最火的 8 首歌,60000 评论看完泪奔!
  8. 嵌套RecyclerView左右滑动替代自定义view
  9. 3.24学习记录(下午)
  10. 59. Spiral Matrix Spiral Matrix II
  11. 个人作业7 第一阶段SCRUM冲刺(九)
  12. 破解含语序问题的点击验证码
  13. 从零开始搭建一个K8S的环境
  14. 如何用30分钟快速优化家中Wi-Fi?阿里工程师有绝招
  15. C# ZPL命令 实现打印中文
  16. 如何解决手机retina显示屏下的1px太粗问题
  17. 代码原理 webkit WebKit-利用百度siteapp开发网站App-(IOS和Android版本)
  18. Zhu-Net——一个隐写分析网络
  19. 我是如何入行嵌入式开发的
  20. CAD异常闪退的原因

热门文章

  1. php 删除mysql 返回_php 返回mysql字符编码与删除字符编码
  2. 201209阶段二FFmpeg转码
  3. 【报错笔记】运行Maven项目时发现项目Build错误
  4. Allegro 光绘文件快速导入
  5. springboot 入门教程(1)
  6. ADSL使用注意事项
  7. 一般处理程序制作的验证码
  8. 《教师教学究竟靠什么--谈新课程的教学观》之交往与互动的教学观 心得体会三...
  9. 2020CCPC(威海) - Labyrinth(bfs+思维)
  10. POJ4449(三维凸包+空间坐标旋转+二维凸包)