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

C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象..., 也不能在 静态成员函数 中访问 普通的 成员变量 和 成员函数 ; 2、静态成员函数声明 静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通的成员函数 转为 静态成员函数...1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(22,3): error C2597: 对非静态成员“Student::m_age”...”的非法引用 " ; static void fun() { // 静态成员函数 中 访问非静态成员会报错 // error C2597: 对非静态成员“Student::m_age”的非法引用...中 访问非静态成员会报错 // error C2597: 对非静态成员“Student::m_age”的非法引用 //m_age = 10; cout << "静态成员函数被调用 : number

86720

c语言函数的隐式声明

c语言里变量必须先声明后使用,函数也不例外,这点和js,php不一样。...double function(void){  return 100.0; } 定义一个函数第一行,声明函数的名字,参数类型个数,返回值,这称为函数原型, 函数原型也可单独写,不带函数体 double...printf("%f", function()); return 0; } double function(void){ return 100.0; } 如果去掉声明函数原型那一行...在main函数中调用function函数时并没有声明它,编译器认为此时隐士声明了int function(void);隐士声明函数返回值都是int,由于我们调用function的时候没有传参数,所以编译器认为这个隐式函数的参数类型是...然后编译器接着往下看,看到function函数的原型是 double function(void);和先前隐式声明的类型不一致。

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

    C语言-函数的定义、声明、传参

    前言 C语言函数是非常重要的知识点,一个完整的C语言程序就是由主函数和各个子函数组成的,主函数调用子函数完成各个逻辑功能。 2. 函数C语言里是什么概念?...函数相当于打包代码的过程,程序代码里如果有很多重复代码,可以将重复代码写成一个函数,进行调用。 C语言程序里除了main函数(主)之外的函数都叫子函数,都属于自定义函数。 3. 函数如何定义?...} int func3(int a,int b,int c,.....) { return 12; } void func4(char *p) { } 4.自定义的函数如何调用和声明?...b) { int c; c=a+b; return c; //返回结果,并终止函数执行 } 6. return 语句作用 return 本身功能终止函数执行,顺带返回一个值给调用者。...静态变量 静态变量声明关键字: static #include #include int func(int a); int main() { int i;

    1.5K10

    c++ 静态函数_c语言if结构格式

    大家好,又见面了,我是你们的朋友全栈君 1、对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法 2、只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间.... 6、即可以通过类名来对静态成员变量进行引用,也可以通过对象名来对静态成员变量进行引用. 7、普通成员函数静态成员函数的区别是: 普通成员函数在参数传递时编译器会隐藏地传递一个this指针,通过this...指针来确定调用类产生的哪个对象; 但是静态成员函数没有this指针,不知道应该访问哪个对象中的数据;所以在程序中不可以用静态成员函数访问类中的普通变量....std; class CShop { public: CShop(int size); void ShowSize(); static void ShowPrice(); //声明静态成员函数用来显示价格...static int ChangePrice(int price); //声明静态成员函数用来更改价格 private: int m_size; //声明一个私有成员变量 static

    79120

    c语言局部变量、全局变量、静态变量、内部函数、外部函数声明、定义、extern作用总结

    5.变量存储类别 在c语言中,每一个变量和函数都是有两个属性:数据类型和数据的存储类别。...c语言中分为四种类别:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern),自动变量存放在动态存储区,静态变量和外部变量存放在静态存储区中,寄存器变量存放在CPU...(2)使用静态存储要多占内存,降低程序可读性,不要过多使用。   (3)局部变量无声明(extern) 2.全局变量与存储类别的关系 (1)所有全局变量都是静态变量,都存在静态存储区。...这里有一个坑,如果变量为static全局变量,在函数内不能扩张其作用域,必须在函数声明以达扩张效果(包括主函数)。...这篇文章只总结变量的声明和定义吧,函数的放到这里总结吧,这样显得没那么乱!

    6.2K83

    静态分析C语言生成函数调用关系的利器——calltree

    (转载请指明出于breaksoftware的csdn博客)         对于C语言的项目,一些文件动辄几千行代码,上百个函数体,理解起来颇有些费劲。...这段问题大意是:calltree是一个针对C语言代码的静态分析工具。它可以以图像的形式产出函数的调用关系。...可惜的是calltree的C语言代码解释器实现的不是那么好,导致其可能无法找到所有函数。一个典型的例子就是通过函数指针进行函数调用的场景。         上文中还提到一个工具cflow。...如果希望了解cflow的使用方法,可以参见《静态分析C语言生成函数调用关系的利器——cflow》。         接下来我们将讲解其编译过程。...当然cflow也有它的好处,我们将在《静态分析C语言生成函数调用关系的利器——cflow》介绍。

    6.8K20

    静态分析C语言生成函数调用关系的利器——cflow

    除了《静态分析C语言生成函数调用关系的利器——calltree》一文中介绍的calltree,我们还可以借助cflow辅助我们阅读理解代码。...(转载请指明出于breaksoftware的csdn博客) cflow的说明和安装         cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。...我只列出我觉得有意思的几个参数:         -T输出函数调用树状图         -m指定需要分析的函数名         -n输出函数所在行号         -r输出调用的反向关系图        ...--cpp预处理,这个还是很重要的 文本输出         最简单的使用方法是以ASCII文本的方式输出结果,比如 cflow -T -m main -n timer.c         其结果是一个包含文件名和函数所在代码行号的调用关系图...()         然而,对于有一定代码量的项目,我们不会使用ASCII文本的方式去查看函数调用关系,因为调用是相当复杂的,而文本图并不适合人去理解。

    3.5K20

    浅谈C语言中的类型声明

    之前群友问了一个C语言问题,即int(*(*p)())、int *(*p)()和int *(*p())的区别在哪里。确实,有时C语言的类型声明是很魔性的,看着也很令人头疼。...这里各举一些C语言函数指针、指针、数组声明的例子: // 一维数组 int arr[5]; // 二维数组 int arr[4][5]; int arr[][5]; // 指针 int *ptr...int *(**ptr) (); 这样一分析,群友问题中的1、2的含义就很明显了——都是一个返回类型为整型指针且不接收参数的函数的指针。 总结 C语言的类型读法可以总结为外向内表内向外。...不过这个仅仅是简单的总结,所以这一小节让我们再进一步深究下去,来从C语言的BNF文法中理解类型声明的语法。 BNF范式 如果你对BNF范式有一定了解,请跳过这一段直接去看“分析”节。...C语言的一个编译单元(translation unit)由数个外部声明组成(external declaration)。而一个外部声明可以是一个函数定义或者声明

    1.7K20

    C++函数调用 | 对被调函数声明

    C++函数调用的方式 在C++中,不允许对函数做嵌套定义,也就是说在一个函数中不能完整地包含另一个函数,在一个程序中每个函数的定义都是互相平行和独立的。...C++被调函数声明函数原型 在一个函数中调用另一个函数,需要满足3个条件。 被调函数必须是已经存在的函数。 如果使用的是库函数里面的,要在程序开头用#include命令将头文件包含到本文件中。...如果使用用户自定义函数,该函数与调用它的函数在同一个程序单位中,且位置在主调函数之后,那么必须要在调用此函数之前对被调函数声明。...函数声明:是指在函数尚未定义时,先将该函数的有关信息告知编译系统,以便编译能正常进行,函数声明的关键字是:extern,可以省略。 经典案例:C++实现对被调函数声明。...C++实现对被调函数声明 更多案例可以go公众号:C语言入门到精通

    1.5K2928

    C语言----C语言内存函数

    1.这个函数在遇到\0的时候并不会停下来 2.如果source和destination有任何的重叠,复制的结果都是未定义的 memcpy函数最终返回的是目标空间的起始地址 //函数的一种写法: 这个函数最终返回的是目标空间的起始地址...: //函数的一种写法: //这个函数最终返回的是目标空间的起始地址 void* my_memcpy(void *dest, const void*src, size_t num) { assert...,非要使用,结果就是未定义的 //只负责不重叠的内存 函数的返回值是void*类型的数据 这个memcpy函数有三个数据 2.memmove--内存移动--使用和模拟实现 2.memmove--内存移动...//总之:这个拷贝是分三块区域的,最前面的一块区域满足dest<src //我们只能从前往后进行拷贝,不然会出错误 //而剩下的两块区域可以同时从后往前进行拷贝,那么我们就将这两块区域放在一起 在C语言标准中...,明确规定了memcpy只要能实现不重叠的拷贝就行,重叠的拷贝交给memmove 我们发现vs上面的库函数memcpy函数也能实现重叠内存的拷贝 我们在以后的拷贝中,我们可以用memmove,因为不管是重叠的还是不重叠的都能搞定

    10310

    C++ 静态数据成员与静态成员函数

    在类中的数据成员或成员函数定义或声明前以static关键词开头,即构成静态数据成员与静态成员函数。...int minute; int sec; }; 2.静态数据成员的意义 C++为什么要进入静态数据成员这个概念,或者它有什么好处。...静态成员函数静态数据成员类似,静态成员函数一样也是在前面加入static关键字。...由于静态成员函数只能访问本类中的静态数据成员,而无法访问非静态数据成员,这样使程序设计更加清晰。 3.静态数据成员的特性 (1)静态成员函数的属性: 静态成员函数属于类,而不属于某一个对象。...(2)静态成员函数的访问: 静态成员函数只能访问本类中的静态数据成员。 非静态成员函数可以访问本类中的静态数据成员与非静态数据成员。

    1.5K50

    C语言篇】从零带你全面了解函数(包括隐式声明等)

    隐式声明 在上述我们讲到在函数调用前要声明,但实际上当没有声明时程序仍然能运行,并且没有出现结果错误,只是报警告而已,这就涉及到c语言中的隐式声明。...隐式声明是指:在C语言中,函数在调用前不一定非要声明。如果没有声明,那么编译器会自动按照一种规则,为调用函数C代码产生汇编代码。...当读这样一段代码时,究竟是忘写了还是省略呢,C语言的隐式函数声明,给程序员带来了各种困惑,给程序的稳定性带来了非常坏的影响。...static 是 静态的意思,可以⽤来: 修饰局部变量 修饰全局变量 修饰函数 extern 是⽤来声明外部符号的。 作⽤域和⽣命周期。...以上就是有关c语言函数的内容啦,各位大佬有什么问题欢迎在评论区指正,您的支持是我创作的最大动力!❤️

    20610

    静态分析C语言生成函数调用关系的利器——cflow(二)

    最近准备把这系列做个修补,同时新增其他语言(比如Golang和Python)品类的“利器”供大家把玩。...在《静态分析C语言生成函数调用关系的利器——cflow》一文中,我们介绍了如何使用cflow查看C语言代码中函数的调用关系。...目前市面上介绍cflow的例子都比较简单(包括我写的那篇《静态分析C语言生成函数调用关系的利器——cflow》),比如函数都在一个文件里的,且调用关系也不复杂。...它有很多代码都是在根目录,而我们这次要分析的是test目录下test-time.c文件中的main函数调用栈。...test-time.c中的函数的调用栈,而像右下角的event_add则没有显示更深的调用栈。

    28110
    领券