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

静态成员函数静态成员函数区别?

一个静态成员函数不与任何对象相联系,故不能对静态成员进行默认访问。 它们根本区别在于静态成员函数没有this指针,而非静态成员函数有一个指向当前对象指针this。...f(Sc &s) 10 { 11 s.nsfn(10); // 转换为Sc::nsfn(&s , 10) 12 s.sfn(10); // 转换为Sc::sfn(10) 13 } 函数...对nsfn()调用,编译像注解那样进行转换,s地址作为第一个传递参数。(你并不实际写该调用,由编译来实现。)...在函数内部,Sc::nsfn()对静态成员访问将自动把this参数作为指向当前对象指针。当Sc::sfn()被调用时,没有任何对象地址被传递。因此,当访问静态成员时,无this指针出错。...这就是为什么一个静态成员函数与任何当前对象都无联系原因。

1.7K90

静态成员函数访问静态数据成员【C++】

初始化: 类型 类名 :: 静态数据成员 = 初始化值 ; 详解:静态数据成员必须在类外初始化,不可在类体内,因为:构造函数中,如果可以,则每次建立对象,都会对静态数据成员值进行修改,这违背静态数据成员使用目的...静态成员函数名 (实参表) ; 注意 类外定义静态成员函数时,定义格式和普通成员函数定义格式相同,不再使用static修饰; 使用对象名和成员运算符(.)调用成员函数时,并非该函数属于某一对象,只是类与对象间桥梁...,为了能处理静态数据成员静态成员函数不能默认引用本类静态数据成员原因: 当调用一个对象静态成员函数时,系统会将该对象起始地址赋予成员函数this指针。...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问类默认静态成员静态成员函数静态数据成员)。...若必须要访问,则有两种方式,且一般使用第二种居多。 对象名 . 静态成员 ; 类名 :: 静态成员 ; 故:实例化对象即可完成对静态数据成员访问

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

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

静态数据成员静态数据成员是属于这个类不是属于某个对象。...在类定义时候静态数据成员是不分配内存,只有在创建类对象时候才分配内存,但静态数据成员是要分配内存,因为它是属于类,只有一块内存,所以要初始化它,而且不能在类声明中初始化,必须要在类外初始化...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意是,静态成员函数只能访问静态数据成员静态成员函数,不能访问静态数据成员,如果要访问静态数据成员...首先,可能你在做题时候,题目要求你使用静态成员函数完成任务…… 开个玩笑啦…… 静态成员函数没有this指针,因为它在类创建时候就存在了,在没有创建类对象时候就已经存在静态成员函数普通函数必须在类对象被创建时候才能被使用...简而言之,静态成员函数是服务于类不是某个类对象,它方便在于不需要定义类对象就能使用

14730

2021-04-14 quickjs调用类静态成员函数

有这样一个需求:多线程条件下执行交易,每个交易都会通过quickjs回调c++代码函数,而这个函数使用数据又来自于当前交易 首先不考虑用全局变量来保存交易数据,因为js回调c函数时候我们无法在回调函数中区分当前属于哪个交易...,如果你总是把交易id通过回调函数传递过来也是可以实现,只是这样函数就多了个参数,写js代码的人无法理解。...一个简单思路是c代码创建交易类,然后把类函数传递给quickjs,然后在js中调用这个类函数,但是这个实现不了,因为quickjs没有注入静态成员函数接口,其原因文章static成员函数通过类名...::来调用,空指针调用成员方法不出错!...讲解比较清楚 换个思路,我们先用js创建这个类,然后调用eval把类数据传递给它,这样调用这个类静态成员函数时候就可以正确访问到数据了,我们直接修改文件example.cpp 具体实现如下

91020

C++类this指针,静态成员,友元函数友元类

一个对象this指针并不是对象本身一部分,不会影响sizeof(对象)结果。 ---- 2....所以this指针不能在静态函数使用静态函数如同静态变量一样,他不属于具体哪一个对象,静态函数表示了整个类范围意义上信息,this指针却实实在在对应一个对象,所以this指针不能被静态函数使用...,在静态函数里面,不可以直接访问静态成员。...静态成员在无需构造对象情况下,可以使用类名访问。...静态局部变量只在定义它函数里面起作用,与普通局部变量相比,当函数返回后,静态局部变量并不会消失,普通局部变量会消失。 静态变量和全局变量值在未初始化,都会被设定为0,而其他变量值设定随机。

1.4K10

静态变量 静态对象 静态函数静态函数区别。(我理解,大家看看对不对)

} } 调用 aa.test("123"); 4、静态函数(就是需要实例化) class aa {     public string test(string str)     {        ...争论最大静态函数这一块。 1、静态变量。在内存里是应该只有一份,不管是不是多线程,是不是多用户同时访问,静态变量只占用一份内存。 2、静态对象和静态变量也差不多,只有一份。...3、静态函数,就是在调用时候必须先实例化,然后才能访问到。 实例化到底做了什么呢?是不是把整个类都“复制”了一份供调用者使用呢?...类属性、函数参数、返回值,这些应该是在实例化时候产生一份,供调用者单独使用,其他调用者是绝对访问不了。 那么函数(或者说是类)呢?也又生成了一份吗?还没有弄清楚。...当然函数内定义变量、对象也应该是独立(多份),有一个调用就产生一份。 小结 静态函数静态函数最大区别是,静态不能访问所在类属性和内私有变量,其他好像都一样了。

1.8K50

【C++】static关键字及其修饰静态成员变量函数详解

消除时顺序是初始化反顺序。 优势: 可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。...static成员概念 声明为static成员称为类静态成员,用static修饰成员变量,称之为静态成员变量;用static修饰成员函数,称之为静态成员函数。...this指针,不能访问任何静态成员;但静态成员可以访问静态成员函数 静态成员也是类成员,受public、protected、private 访问限定符限制 ststic成员应用 利用static...实现一个可以计算程序中正在使用类对象有多少类 我们可以利用对象创建必调用构造,销毁必调用析构函数特性,在类里创建一个static类对象来记录类对象创建数/销毁数。...,如: 2.使用成员函数来创建类对象是因为成员函数调用类函数不受访问限定符限制,如: 3.使用static修饰成员函数是因为要解决无类对象就无法调用类成员函数问题,如: 做个梗图给大家形象理解一下这里矛盾逻辑

15710

原创】C++类成员函数重载、覆盖和隐藏

题目: 类成员函数重载、覆盖和隐藏区别描述正确有?...、函数名字相同,参数相同,基类无virtual关键字派生类函数会"隐藏"父类函数 答案: CD 解析: a.成员函数被重载特征: (1)相同范围(在同一个类中); (2)函数名字相同;...b.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 c....“隐藏”是指派生类函数屏蔽了与其同名基类函数,规则如下: (1)如果派生类函数与基类函数同名,但是参数不同。此时,不论有无virtual关键字,基类函数将被隐藏(注意别与重载混淆)。...(2)如果派生类函数与基类函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类函数被隐藏(注意别与覆盖混淆)。

66720

从零开始学C++之对象使用(一):static 成员变量、static 成员函数、类对象大小

可以实施封装,static成员可以是私有的,全局对象不可以 阅读程序容易看出static成员与某个类相关联,这种可见性可以清晰地反映程序员意图。...,可以通过类名:: 访问static 成员变量,也可以通过/静态成员函数访问。...二、static 成员函数 static成员函数没有隐含this指针 静态成员函数可以访问静态成员 静态成员函数不可以访问静态成员(实际上是直接访问是不可以,间接地访问是可以,比如通过类指针或类引用...TestStaticFun()     {         cout << "TestStaticFun ..." << endl;         //TestFun();        Error,静态成员函数不能调用静态成员函数...        //cout<<"y="<<y_<<endl;     Error,<em>静态</em><em>成员</em><em>函数</em>不能访问<em>非</em><em>静态</em><em>成员</em>     }     static int x_;      // <em>静态</em><em>成员</em><em>的</em>引用性说明

1.2K00

子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B静态代码块、子类A构造函数、子类A静态代码块、子类A静态代码块 执行先后顺序是?

(1)子类A继承父类B, A a = new A(); 则: 父类B静态代码块->子类A静态代码块->父类B静态代码块->父类B构造函数->子类A静态代码块->子类A构造函数 (2)若子类构造函数中显式调用了父类某构造函数...,则调用该构造函数 class C { C() { System.out.print("C"); } } class A { C c = new C();...执行父类带参构造前要先对父类中对象进行初始化,对父类中c成员进行初始化,调用了C类无参构造,所以调用顺序为: 先调用C类无参构造 再调用A类带参构造 最后调用调用子类构造 (3...)在JVM调用mian方法之前先用进行静态内容初始化。...顺序为:父类静态变量, 父类静态代码块 ,子类静态变量,子类静态代码块。

2.1K30

【Linux程序设计】之Linux库函数使用,多文件程序开发,静态与共享函数

实验题目:Linux基础程序设计综合实验 实验目的:熟悉并掌握Linux库函数使用,多文件程序开发,静态与共享函数制作,Makefile文件编写以及gdb调试等。...3、函数mysqrt能够实现:1)输入负整数;2)输出输入整数平方根;其中,mysqrt.h包含函数mysqrt声明,mysqrt.c包含函数mysqrt实现。...将上述“一”程序中函数mysqrt和mypow制作成静态函数库libmyku.a,并使用库libmyku.a重新编译源程序myfirst.c。...-lfoo -L.选项指示编译器在当前目录下查找函数库,-lfoo选项指示编译器使用名为libfoo.a 函数库(或者名为libfoo.so共享库) 三、动态共享库制作 将上述“一”程序中函数mysqrt...注意:使用共享库编译和运行源程序时,均需考虑函数路径问题。

1.1K20

【库函数】Linux下动态库.so和静态库.a生成和使用

静态库 3.1 静态库如何生成 3.1.1 文件详情 3.1.2 编译生成动态库 3.2 静态库如何使用 1....库可以分为静态库和动态库两种类型: 静态库 作用:在程序编译时候,将库编译进可执行程序中, 运行时候不需要外部函数库 目录:默认库目录 /lib 或 /usr/lib 或 /usr/local.../lib 后缀:libxxx.a 命名规范:静态名字一般为libxxxx.a,其中 xxxx 是该lib名称 动态库 作用:在程序运行时候,将库加载到程序中,运行时候需要外部函数库 目录...现在,会得到一个名为 libtest.so 动态库文件。 2.2 动态库如何使用 前面已经成功生成了一个动态链接库libtest.so,下面通过一个程序来调用这个库里函数。...3.2 静态库如何使用 前面已经成功生成了一个动态链接库libtest.so,下面通过一个程序来调用这个库里函数

2400

【面试题】Java中子类和父类静态代码块、静态代码块、构造函数执行顺序总结一览表

我们知道类加载过程是先将编译后class文件加载到内存中,一个类只会被加载到内存中一次。static修饰代码块属于类信息,所以,静态代码块中代码有且只有一次被执行。...执行时机:类被加载时候。二:静态代码块静态代码块是用来初始化类实例信息。当我们new关键字创建一个对象时候,就会被执行,而且每使用一个new关键字创建出一个新对象时候就会被执行一次。...静态代码块也可以叫作:静态初始化代码块运行时机:会在构造函数执行时候,在构造函数代码执行之前被运行三:构造函数构造函数或者构造方法不用多说了吧,就是用来创建对象。...如下图:2:父类和子类中静态代码块、静态代码块、构造函数执行顺序:父类中静态代码块→子类中静态代码块→父类静态代码块→父类构造函数→子类静态代码块→子类构造函数具体加载如下图:所以,根据上面的分析...父类B静态代码块 sya() 父类B构造函数 子类A静态代码块 sya()1 子类A构造函数 启动完成总之一句话总结:父类早于子类、静态早于静态静态早于构造函数

52850

杨校老师课堂之Java面向对象知识点整理集锦

目录 第一部分 Java面向对象 1.开发环境搭建及开发工具eclipse使用 2.类和对象 3. 成员变量和局部变量区别 4. 数据类型 5.构造函数 6.函数 7....必须先定义,赋值,最后使用 在内存中位置不同  【重点】 成员变量:堆内存 局部变量:栈内存 生命周期不同  【重点】 成员变量:随着对象创建存在,随着对象消失消失 局部变量:...9. static关键字 概述 关于 static 关键字使用,它可以用来修饰成员变量和成员方法,被修饰成员是属于类不是单单是属 于某个对象。...9.2 静态成员方法 当 static 修饰成员方法时,该方法称为类方法 。 静态方法在声明中有 static ,建议使用类名来调用,不需要 创建类对象。 调用方式非常简单。 10....如果不是这样,则假定 c 就是"c"字符本身\d数字字符匹配。等效于 [0-9]\D数字字符匹配。等效于 [^0-9] \f 换页符匹配。等效于 \x0c 和 \cL \n 换行符匹配。

42630

C++ 中static关键字使用场景

静态局部变量保存在全局数据区,不是保存在栈中,每次值保持到下一次调用,直到下次赋新值。...第二,一旦利息需要改变时,只要改变一次, 则所有存款类对象利息全改变过来了; 同全局变量相比,使用静态数据成员有两个优势静态数据成员没有进入程序全局名字空间,因此不存在与程序中其它全局名字冲突可能性...静态数据成员可以是private成员全局变量不能; 2. 静态成员函数静态数据成员一样,我们也可以创建一个静态成员函数,它为类全部服务不是为某一个类具体对象服务。...从这个意义上讲,它无法访问属于类对象静态数据成员,也无法访问静态成员函数,它只能调用其余静态成员函数。...包括静态成员函数访问静态数据成员和访问静态成员函数静态成员函数可以任意地访问静态成员函数静态数据成员静态成员函数不能访问静态成员函数静态数据成员; 由于没有this指针额外开销,因此静态成员函数与类全局函数相比速度上会有少许增长

3.1K40

CCPP中static用法:全局变量与局部变量

在C++中,静态成员是属于整个类不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。...静态成员函数 (1)静态成员函数静态数据成员一样,他们都属于类静态成员不是对象成员。 (2)静态成员函数有this指针,静态成员函数没有this指针。...(3)静态成员函数主要用来方位静态数据成员不能访问静态成员。 C++ 类静态成员详细讲解 在C++中,静态成员是属于整个类不是某个对象,静态成员变量只存储一份供所有对象共用。...结论2: 类对象可以使用静态成员函数静态成员函数。...,在类实例化对象之前就已经分配空间了,静态成员必须在类实例化对象后才有内存空间,所以这个调用就出错了,就好比没有声明一个变量却提前使用它一样。

1.2K20
领券