首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
未来再见jy
厦门大学 算法工程师
发布于北京
关注
已关注
取消关注
@Dreams0000:
🍏02-C++面试之static关键字
[TOC]0 前述针对于自己在秋招的面试中,对于Cpp部分遇到的问题,其中大部分是以此为起点,尼克以基于这些点,将自己对于Cpp的学习,串联起来,无论面试官,问这一类问题中的那个点,你都应该可以将这一个珠子串联到自己一大串知识点上来讲。这是一种拓展知识的能力。在此专栏下面个人校招记录:回馈牛客,对CPP做一个小小的总结。下面对应的是之前发布的个人校招其他公司面试总结,希望可以更好的帮到你✍✍总结:以代码的方式回看自己23届校招 | 或恐慌、疑惑、好在坚持!🌋大疆DJI 嵌入式 ✨MINIEYE自动驾驶 软开 深圳 实习 🌟百度 嵌入式软开 上海 2022.07🌳深圳杰理科技嵌入式 2022.07.26🌵深圳 诺瓦星云提前批 嵌入式 2022.08.06🌴哲库科技 提前批 2022.08.07🌲经纬恒润 自动驾驶嵌入式 1,2面 2022.08.15😥丰疆智能 嵌入式软开 1,2,3面+4面 2022.08.09🤷♂️一次让我略感疲惫的英文面试--吉利极氪 嵌入式软开🙆♂️♂️【深信服校招】笔试+面试 软件开发工程师🌾ZTE中兴软件工程师 一面+二面 2022.08.29🌱紫光同芯 嵌入式软开 芯片 2022.09.19🌄美团校招面经 嵌入式 1,2面 2022. 09🎋360 软开 一面+二面+ 2022.09这里是Cpp一些面试问题整理🥭01-C++面试之C++11新特性总结🍏02-C++面试之static关键字🍑03-C++面试之四种强制类型转换🍋04-C++面试之析构函数和构造函数……未完待续1 不考虑class情况:和c语言的static一样隐藏:所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用;加了static之后只能在该文件所在的编译模块中使用。未初始化静态变量默认初始化为0:都存在静态存储区.BSS。静态变量作用持久:静态变量在函数内定义,始终存在,但只进行一次初始化,具有记忆性,其作用范围与局部变量相同,函数退出后仍然存在,但不能够使用。全局的变量/静态变量,在编译过程中,就已经生成在执行文件中了;局部静态变量在程序运行时创建到静态内存区域,此后一直持续到运行结束时候,再消失。2 考虑class类的情况static修饰变量,是整个类的数据成员,存储不占用某个具体对象的空间,其存储在静态存储区;static修饰成员函数,用于处理静态成员变量,可以用类名字来调用,也可以用对象名字来调用。通过类名+作用域运算符::直接访问静态成员,并且可以使用类的对象、引用或者指针来访问静态成员。但通过类名不可以访问非静态成员,通过类的对象可以调用静态和非静态的。原因在于:静态成员函数属于这个类在初始化的时候加载的,在类实例化对象之前,就已经分配了内存空间了;而非静态成员函数必须在类实例化对象后才有内存空间,所以不能通过类名来调用非静态函数,好比调用了一个没有声明的函数。静态成员函数:定义在类的内外部都可以;类外部实现逻辑的时候,不需要static关键字(类里面已经声明过了);并且与一般的成员函数的区别就是没有this指针,不能访问类的非静态成员变量。1)原因分析:由于静态成员函数没有this指针,不知道指向哪一个对象,所以无法访问对象的成员变量,只能访问静态成员变量,(也就是每个对象都共有的静态变量)2)this参数拓展一个问题:(拓展解析:sort函数的比较函数,写在类里面时需要使用static bool operator见C++STL模块13th ),由于传入sort函数sort(nums.begin(), nums.end(), more);的比较函数more,需要符合fefault形式,在类里面声明的话,需要设置成static形式,消除掉这个默认的this参数。3)this参数再次拓展一个问题:对于pthread_create()的线程函数(第三个参数)来说,线程函数需要设置成静态成员函数,由于类成员函数,默认的会传入参数this指针进去,所以设置为静态成员函数。静态成员变量:不是在类的构造函数进行初始化(只有在实例化对象的时候才调用)的,它是独立于对象的操作,必须在类的外部定义和初始化每个静态成员,存放在全局变量.data区,且一直存活在整个文件生命周期内。Nonstatic data members 放置的是“个别的class object”感兴趣的数据,Static data members 则放置的是“整个class”感兴趣的数据。Static data members 永远只存在一份实例(即使该class 没有 任何object实例,其static data members也已存在,在类实例化对象之前就已经分配了内存空间。--深度探索C++对象模型p88静态成员变量类的初始化例子class Account { public: void f1(); static double rate() { retunr interestRate; } static void rate(double); // 类在外部定义的时候,不在需要static关键字 private: std::string owner; // 两个成员 double amount; static constexpr int period =30; // 是常量表达式就可以直接在内部进行定义 static double interestRate; // 一般的static 变量需要在外部定义 }// 一般的话,是在类的外部定义static变量double Account::interestRate =initRate();// 类在外部定义的时候,不在需要static关键字void Account::rate(double a) { interestRate =newRate;}void main() { Account::f1(); // 不可以引用的,非静态成员的引用必须与特定的对象相对 Account::rate(); // 静态成员是可以的}优点:1)节省内存空间,因为它是所有对象公有的,对多个对象来说,静态数据成员值存储在全局静态变量.data区;2)静态值更新:只初始化一次,只要对静态成员变量的值更新一次,就可以保证所有对象得到的都是更新后的值,提高时间效率;3)内存分配时间阶段:静态全局变量,在主程序之前,编译器在编译时期已经为其分配好内存并初始化;局部静态变量(在函数体内),在第一次运行时分配到全局变量区.data区,并进行初始化。3 类中的静态成员函数如何访问非静态成员函数(延伸一个问题)由上分析,众所周知,这是不可以访问的,因为1)静态成员函数不属于某一个具体的类的,而是所有类进行共享的;2)static 函数没有默认的this指针作为参数传递进来。所以,当static成员函数,来调用non-static的成员变量时,不知道调用的是哪个实例的类的成员变量。可以说,就是因为没有this指针的缘故,因此,想访问的话,我们就传递一个this指针给static成员函数即可。🤔way-01:在静态函数的形参表里加上实例的地址(直接使用这个即可)class A{public: static void test(A *a) { a->m_a += 1; /* 通过传递指针作为参数的形式访问 */ } void hello() { }private: static int m_staticA; int m_a};🤔way-02:放上全局变量地址(不推荐):dog:A g_a;class A{public: static void test() { g_a.m_a += 1; /* 以全局变量的形式访问 */ } void hello() { }private: static int m_staticA; int m_a};🤔way-03:静态函数可以访问静态成员,所以在成员变量里面将一个静态变量保存着this指针即可,在初始化的,将该静态变量初始化为this指针即可。class A{public: A() { m_gA = this; /* 直接赋值为this指针即可 */ } static void test() { m_gA.m_a += 1; } void hello() { }private: static int m_staticA; static A *m_gA; /* 利用这个指针变量即可 */ int m_a};参考网址:C/C++ 中 static 的用法全局变量与局部变量C++静态成员函数访问非静态成员的几种方法😯Q1 类中的静态成员函数可以定义为虚函数吗?结论一般的static是不属于任何类对象的,独立于类对像存在的,大家共享一个函数,即便此静态函数加上virtual也是没有意义的。区别点回忆静态和非静态成员函数的一个主要区别就是,静态成员函数没有this指针,独立于类对象存在。那这样就矛盾起来,虚函数需要依靠类对象的this指针-->虚表指针vptr-->虚表,来进行调用的。对于静态函数,没有this,所以无法访问虚函数。虚函数的调用关系this-->vptr-->vtable-->virtual function
点赞 8
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-11 17:13
郑州大学 材料研发工程师
拓竹科技周日也上班哈
我寻思周日都在休息呢,没看进度,今天才发现昨天周日给挂了,是不是侧面说明他们周日也上班?(纯猜测)
投递拓竹科技等公司10个岗位
点赞
评论
收藏
分享
昨天 17:16
门头沟学院 机械结构工程师
mentor说我把公司当免费自习室
公司的饭能混一顿混一顿,不加班的时候也要点加班餐,因为要在公司蹭水蹭电学习,面试时直接去会议室面试,有啥没回答上来的直接问周围的人并且录音。周六周日也要去公司学习并且打加班卡,因为这样我可以混两天饭和水和空调。mentor说我简直就是把公司当免费自习室
还得学啊老弟:
我直接告诉mentor我去一边面试了,mentor说我可以在公司面完了拿夜宵
工作上你捅过哪些篓子?
点赞
评论
收藏
分享
07-29 00:50
桂林学院 新媒体运营
面试三十家零offer 谁有我惨
来之前心里做好了准备 但没想到会这么惨找了一个月工作 面试了三十家 0 offer好消息:有过的 坏消息:私人助理灰色岗位财务行政运营都投 石沉大海 开始的一阵每场面试都会全身正装+全妆+熬夜做面试功课 顶着三十多度大热天到处跑面试 不是被几分钟打发刷KPI就是压榨加班工作内容不符 不是嫌弃应届生没经验 就是面试都好好的总是被夸“你还挺不错的”结果回去都无任何回应 以为机会都是争取来的 再码好诚意小作文再争取的无数次后 终究换来一句“还是不适合”到现在已经完全麻了 精气神也被磨灭没了民本没经验的应届生像路边居无定所的野狗时间过去了这么久 已经支撑不起深圳的生活成本了 脑子里闪过一个想法 不是我想走捷径 而是真的无路可走求大佬内推 求求!!不想刷boss直骗智联招笑前程堪忧了 不是我不想努力了 是努力也根本没有用
求职的纳鲁多:
你是我见过最美的牛客女孩
点赞
评论
收藏
分享
06-17 07:20
河南交通职业技术学院 产品专员
不是哥们儿……
仁者伍敌:
牛子这些人还会点一个自动回复,boss都不带回复的
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
08-08 13:37
oppo你到底想招什么样的人才啊
看来双九是不配了
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
25年秋招精心整理的最新互联网大厂笔面试题集合
2.2W
2
...
总结常用的拖offer的几种话术
1.1W
3
...
26届秋招建议
7538
4
...
字节秋招-后端开发-一面
6469
5
...
26秋招-拓竹嵌入式软件面经
5535
6
...
8月份面经整理的算法高频题集合
4566
7
...
本华为OD终于翻身!(百度后端面经)
4522
8
...
小红书笔试
3532
9
...
字节秋招意向
3103
10
...
字节二面-半技术半聊天?
2122
创作者周榜
更多
正在热议
更多
#
我的秋招“寄”录
#
23678次浏览
274人参与
#
如果校招重来我最想改变的是
#
276049次浏览
2863人参与
#
腾讯大前端岗位热招中
#
16035次浏览
180人参与
#
给26届的秋招建议
#
9115次浏览
349人参与
#
CVTE求职进展汇总
#
17675次浏览
295人参与
#
实习的内耗时刻
#
24008次浏览
331人参与
#
去哪儿旅行秋招
#
245535次浏览
3194人参与
#
你上一次给父母打电话是什么时候
#
8633次浏览
90人参与
#
独居后,你的生活是更好了还是更差了?
#
8006次浏览
127人参与
#
规定下班时间vs实际下班时间
#
14216次浏览
121人参与
#
工作上你捅过哪些篓子?
#
11490次浏览
85人参与
#
秋招,不懂就问
#
5291次浏览
37人参与
#
你最近一次加班是什么时候?
#
74677次浏览
396人参与
#
安利/避雷我的专业
#
80593次浏览
531人参与
#
入职第四天,心情怎么样
#
33859次浏览
443人参与
#
大城市找工作会更容易吗
#
44075次浏览
352人参与
#
我的AI电子员工
#
10811次浏览
80人参与
#
你觉得找工作该拿大厂还是小厂练手
#
200150次浏览
1760人参与
#
速腾聚创求职进展汇总
#
34336次浏览
240人参与
#
秋招想进国企该如何准备
#
81833次浏览
444人参与
#
得物求职进展汇总
#
103969次浏览
833人参与
#
我的国央企投递进展
#
51136次浏览
308人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务