首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

static修饰函数什么特点(static可以修饰所有的变量)

static修饰函数叫做静态函数,静态函数两种,根据其出现地方来分类: 如果这个静态函数出现在类里,那么它是一个静态成员函数; 静态成员函数作用在于:调用这个函数不会访问或者修改任何对象...其实很好理解,类静态成员(变量和方法)属于类本身,在类加载时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类对象,所以只有在类对象产生(创建类实例)时才会分配内存,然后通过类对象...如果它不是出现在类中,那么它是一个普通全局静态函数。 这样static函数与普通函数区别是:用static修饰函数,限定在本源码文件中,不能被本源码文件以外代码文件调用。...而普通函数,默认是extern,也就是说它可以被其它代码文件调用。   在函数返回类型前加上关键字static,函数就被定义成为静态函数。...因此定义静态函数以下好处:    其他文件中可以定义相同名字函数,不会发生冲突。    静态函数不能被其他文件所用。

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

编程小知识之 Dispose 模式

我们需要借助 C# 中函数(或者叫终结器) 这里我们暂时不去关注 C# 中函数各个细节,只要知道函数可以在类型被回收之前执行就行了,新示例代码如下: // dispose pattern...,这也是出于健壮性考虑), Dispose() 方法 GC.SuppressFinalize(this); 便是用来"屏蔽"函数执行(定义了函数类型可以通过调用 GC.SuppressFinalize...如果是函数调用,我们可以释放托管资源(标准实现是仅释放非托管资源)?...答案是不可以,你可以简单理解为在函数中不可以引用其他托管资源(其实,实现上来讲,你是可以函数中引用其他托管资源,只是这些托管资源如果也实现了函数(譬如这些托管资源自身实现了 Dispose...模式),那么 CLR 调用这些函数顺序是不定,这会造成重复释放等问题,再者,如果你引用静态变量来进行托管资源释放,在 Environment.HasShutdownStarted == true

98220

Envoy源码分析之Dispatcher

都是通过裸指针方式进行回调,如果进行回调时候对象已经了,就会出现野指针问题,我相信C++水平还可以同学都会看出这个问题,除非能在逻辑上保证Dispatcher生命周期比所有对象都短,这样就能保证在回调时候对象肯定不会...可能有人会有疑问,对象在时候把注册事件取消不就可以避免野指针问题? 那如果事件已经触发了,callback正在等待运行呢? 又或者callback运行了一半呢?...前者libevent是可以保证,在调用event_del时候可以把处于等待运行事件取消掉,但是后者就无能为力了,这个时候如果对象了,那行为就是未定义了。...沿着这个思路想一想,是不是只要保证对象时候没有callback正在运行就可以解决问题了呢?是的,只要保证所有在执行中callback执行完了,再做对象可以了。...可以利用Dispatcher是顺序执行所有callback特点,向Dispatcher中插入一个任务就是用来对象,那么当这个任务执行时候是可以保证没有其他任何callback在运行。

1.6K40

C++ 初阶 类和对象(中)

细节: 方法1和方法2不可以同时存在,否则编译器会出现歧义 值得一提是,方法1和方法2都可以和声明形式共存,这是因为一旦了构造函数,编译器就会忽略声明初始化而去调用构造函数内容。...细心同学可以发现,a也被初始化了,它不应该是随机值?...感兴趣小伙伴可以试一下。 二、函数 1.为什么要有函数?...讲完了构造函数,那么我们就来讲一下函数,既然构造函数是令类创建时候初始化,那么函数则是在类生命域结束时候将目标清理,也就是destroy,比方说,我们写了一个顺序表,它malloc了一大块空间...因此在C++中,就诞生了一个函数,它就是函数,它能够令对应类出了它生命域便销毁,从而保证了安全性。 2.函数特性 1. 函数名是在类名前加上字符 ~。 2.

12610

【c++】类和对象(三)构造函数函数

构造函数可以参数,也可以没有参数,允许通过不同方式初始化对象成员变量。...Time类对象,为什么最后会调用Time类函数?...,而Date没有显式提供,则编译器会给Date类生成一个默认函数,目的是在其内部调用Time类函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁 main函数中并没有直接调用...Time类函数,而是显式调用编译器为Date类生成默认函数注意:创建哪个类对象则调用该类函数,销毁那个类对象则调用该类函数 如果类中没有申请资源时,函数可以不写,直接使用编译器生成默认函数...,比如Date类;资源申请时,一定要写,否则会造成资源泄漏,比如Stack类 3.2函数调用顺序 class Date { public: Date(int year=1) { _year

12310

【C++】继承

那上面这三个,我们可以让子类也打印一下信息,观察一下它们调用顺序: 我们发现都是一个先父后子顺序。 4.4 函数函数呢?...按照上面的规律,都是先调用父类处理父类成员,然后再处理自己,那我们可以这样写: 但我我们发现这里调不了父类。 那为什么调不了父类呢?...所以这里才不需要我们自己去显式调父类,而是它自己调,其实就是为了保证这个顺序。 所以对于函数: 派生类(子类)函数会在调用完成后自动调用基类(父类)函数清理基类成员。...因为这样才能保证先清理子类成员再清理父类成员顺序。 派生类对象初始化先调用基类构造再调派生类构造。 派生类对象清理先调用派生类再调基类。 5....如何实现一个不能被继承类 那学到这里,大家来思考一个问题,如何去实现一个不能被继承类? 我们可以将它构造函数函数设置成私有的。 为什么这样就可以呢?

9010

c++类和继承面试点25连问

函数是否可以为虚函数?如果可以什么作用? 函数可以是虚函数,因为它是对象结束时才调用,不影响虚表构建。...那么函数作为虚函数什么作用呢,看这样一段代码: #include using namespace std; class A { public: A() {...所以当类派生类时,函数一定要是虚函数。 8....函数是否可以抛异常 可以,但是最好不要抛出,如果一定要抛出,那要在函数内部处理,保证函数能执行完成。 16....22. new一个类时候发生了什么 new其实就是申请动态内存,而一个类只有虚指针和成员变量才需要内存,所以new一个类就是给虚指针和成员变量申请内存空间。 23. 类成员函数地址

88410

每日一问06 构造函数可以是虚函数

技术分类:开发语言 前置知识:虚函数工作原理 推荐阅读 :[侯捷]C++内存管理--从平地到万丈高楼 https://www.bilibili.com/video/BV1Kb411B7N8 思路 构造函数可以是虚函数...是构造函数特点决定函数使用条件必须是通过指针或者引用调用 构造函数无法通过指针直接调用。只能通过 placement new方式调用。...根本说不清楚:必须创建好了,才能用,不懂 抽象和具体关系.接口不属于具体一个类 函数可以是虚函数,为什么 参考思路: 可以函数 执行顺序是 派生类 ,基类 如果函数不被声明成虚函数,则编译器实施静态绑定...,在删除指向派生类基类指针时,只会调用基类函数而不调用派生类函数,这样就会造成派生类对象不完全。...如果声明了,触发 派生类 ,基类 正确顺序

68230

C++:继承与派生

4、派生类函数会在被调用完成后自动调用基类函数清理基类成员。因为这样才能 保证派生类对象先清理派生类成员再清理基类成员顺序。 5....,会自定调用父类函数保证子再父 protected: int _num; //学号 }; 思考: 1、既然我们知道了怎么显式写,但是真的必要吗??...那么编译器会对函数名进行特殊处理,处理成destrutor(),所以父类函数不加virtual情况下,子类函数和父类函数构成隐藏关系。...2、子类和父类构造和顺序是怎么样? 五、继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员 解决方案就是在学生类里也搞个友元。...(将函数设成私有也可以) 但是你可能会想,把构造函数放在私域,那A不是也创建不了对象了吗???确实是这样! 但是也有一个解决方法,就是利用静态成员函数去返回这个构造函数

9310

C++面试题

函数同样也是成员函数,虚函数也会进入虚表,唯一不同是,函数名并不要求一致,而且,你如果不写,编译器也会帮你生成,而且如果基类virtual,编译器也会默认给子类添加。...但是不论如何它依旧遵守多态规则,也就是说,如果你函数是虚函数,调用虚函数规则也遵守多态原则,也就是会调用子类函数,这和其他虚函数机制完全一致,并没有什么不同。...而子类函数具有掉基类职责,所以不会造成内存泄漏。而基类并不知道自己子类。 4. 构造函数函数能抛出异常? 不能。 5. 多继承存在什么问题?如何消除多继承中二义性?...C++空类哪些成员函数 默认构造函数、 默认拷贝构造函数、 默认函数、 默认赋值运算符,以及取址运算符和 const 取址运算符。 10. 虚函数表属于类还是对象?虚函数什么内存空间?...因此,将函数设为私有,类对象就无法建立在栈上了。 7. 浅拷贝和深拷贝什么区别? 8. 字节对齐原则是什么

1.7K42

如何快速掌握一门新技术,什么独特学习方法和技巧可以分享

今日话题:如何快速掌握一门新技术,什么独特学习方法和技巧可以分享?图片这个话题引起了我思考和总结,现在技术这么多,我们该如何高效学习呢?我先总结一下我所了解技术和学习路径。...,很多也用不上了。...针对这么多技术,我也总结了我学习过程中技巧。快速学习技巧学习目标的确立在学习一门新技术之前,可以先确定自己学习目标,为什么要去学,要学到什么程度。如为了更高薪资、为了学习技术。...可以跟着视频教程做项目,也可以根据实际问题开发出对应代码。如:shigen上次就使用python开发了一个在控制台阅读Excel文件内容工具。...不断分享新技术新体验新技巧,主打一个与shigen一起,每天不一样!以上就是shigen对于如何快速掌握一门新技术,你什么独特学习方法和技巧可以分享经验总结和分享了。

20620

构造函数以及函数在PHP中需要注意地方

构造函数是在函数实例创建时可以用来做一些初始化工作,而函数可以在实例销毁前做一些清理工作。...相对来说,构造函数我们使用得非常多,而函数则一般会用在释放资源上,比如数据库链接、文件读写句柄等。...C:函数被调用,$c // A:函数被调用,$b // B:函数被调用,$b // A:函数被调用,$a 上面的代码是不是一些内容和我们预期不太一样?...构造函数函数访问限制 构造函数函数默认都是public,和类中其他方法默认值一样。当然它们也可以设置成private和protected。...关于单例模式为什么要让外部无法实例化问题,我们可以看看之前设计模式系统文章中单例模式。

1.6K20

C++从入门到精通——类6个默认成员函数函数

函数 前言 一、函数概念 二、函数特性 三、函数练习题 四、总结 前言 类6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有?...Time类对象,为什么最后会调用Time类函数?...Time 类函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁 main函数中并没有直接调用Time类函数,而是显式调用编译器为Date类生成默认函数 注意:创建哪个类对象则调用该类函数...,销毁那个类对象则调用该类函数 如果类中没有申请资源时,函数可以不写,直接使用编译器生成默认函数,比如Date类;资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。...三、函数练习题 两个栈实现一个队列 四、总结 资源需要显示清理,就需要写函数。如Stack List 没有资源需要清理,如Date (日期类),内置类型成员没有资源需要清理。

11110

学过 C++ 你,不得不知这 10 条细节!

函数 函数 可以发现在进入 operator== 函数时,发生了「复制构造函」,当离开该函数作用域后发生了「函数」。...... // 校验数据完整性 return text[position]; } private: std::string text; }; 可以一种解决方法...// 函数 Student stu2(stu1); // 复制构造函数 stu2 = stu1; // 赋值操作符函数 编译器为我们写函数,来说说这些函数做了什么?...注意,编译器产出函数是个 non-virtual,除非这个 class base class 自身声明 virtual 函数。...多态性质基类需声明 virtual 函数 如果在多态性质基类,没有声明一个 virtual 函数,那么在 delete 基类指针对象时候,只会调用基类函数,而不会调用派生类函数

68320

一文带你掌握多继承,菱形继承以及虚拟继承

> 在基类和父类中定义同名成员函数. 问题:下面的void Print(int a)函数和void Print(double b)函数构成函数重载?...如果基类没有默认构造函数,则必须在派生类构造函数初始化列表阶段显示调用(即带参构造). (2)函数: 在进行派生类时,应当先派生类成员,再基类成员....为了保证这个顺序,派生类函数会在被调用完成后自动调用基类函数清理基类成员。因为这样才能保证派生类对象先清理派生类成员再清理基类成员顺序。...派生类对象清理先调用派生类再调基类。...单继承好处在于它可以保证类之间关系更加清晰和简单,并且可以减少代码冗余和复杂度。 多继承: 在C++中,多继承是指当一个类继承自多个父类时继承方式。

17650

python技术面试题(十九)--腾讯

我们可以根据 __mro__(是一个魔法方法,称为方法解析顺序,用来获取当前类方法继承顺序)来查看继承顺序。 在腾讯面试中,面试官质疑我答案,觉得多个父类同名方法,继承不是第一个。...6.函数 答:函数就是当对象结束其生命周期,比如对象所在函数已经调用完毕,程序结束时,系统自动执行函数。在python中,当一个对象引用计数为0时候, __del__会被自动调用。...__del__就是一个函数。 7.继承,在执行函数时,先执行父类,还是先执行子类? 答:时,会先调用子类函数,再调用父类。...初始化子类时,会先自动调用父类构造函数,然后调用子类构造函数。 8.继承时,所有的方法都会被继承? 答:不会,比如构造函数函数,它们不能被继承。...简单说就是保证只有一个对象,节约内存空间,我们可以通过修改类中 __new__方法,实现一个简单单例类。 之前文章中有相关代码也写过这个题。

3.7K40

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

所以C++标准定为全局或静态对象是首次用到时才会进行构造,并通过atexit()来管理。在程序结束,按照构造顺序反方向进行逐个。所以在C++中是可以使用变量对静态局部变量进行初始化。...77、构造函数函数可以调用虚函数,为什么 1) 在C++中,提倡不在构造函数函数中调用虚函数; 2) 构造函数函数调用虚函数时都不使用动态联编,如果在构造函数函数中调用虚函数,...却可以函数》:https://dwz.cn/lnfW9H6m 82、类什么时候会?...83、构造函数或者函数可以调用虚函数 简要结论: 从语法上讲,调用完全没有问题。 但是从效果上看,往往不能达到需要目的。...避免方法就是将第一个指针(比如a->value)置为NULL,这样在调用函数时候,由于判断是否为NULL语句,所以a时候并不会回收a->value指向空间; 3) 移动构造函数参数和拷贝构造函数不同

2.2K40

C++奇迹之旅:构造函数函数

6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。...函数 函数:与构造函数功能相反,函数不是完成对对象本身销毁,局部对象销毁工作是由编译器完成。而对象在销毁时会自动调用函数,完成对象中资源清理工作。...Time类对象,为什么最后会调用Time类函数?...Time类函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁main函数中并没有直接调用Time类函数,而是显式调用编译器为Date类生成默认函数 注意:创建哪个类对象则调用该类函数...,销毁那个类对象则调用该类函数 如果类中没有申请资源时,函数可以不写,直接使用编译器生成默认函数,比如Date类;资源申请时,一定要写,否则会造成资源泄漏,比如Stack类。

7410
领券