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

从对象调用静态函数与类本身的区别

在于调用方式和作用范围。

  1. 调用方式:
  2. 从对象调用静态函数:需要先创建类的实例对象,然后通过对象来调用静态函数,使用对象名加点操作符来调用。
  3. 类本身调用静态函数:直接使用类名加点操作符来调用静态函数,无需创建类的实例对象。
  4. 作用范围:
  5. 从对象调用静态函数:静态函数在对象中的作用范围是局部的,只能在该对象的上下文中使用。
  6. 类本身调用静态函数:静态函数在类本身中的作用范围是全局的,可以在任何地方直接调用。

静态函数是指在类中使用static关键字修饰的函数,它与类的实例对象无关,可以直接通过类名来调用。静态函数的特点是不依赖于对象的状态,可以在任何时候调用,而不需要创建对象实例。静态函数通常用于实现一些与类相关的工具函数、公共函数或者全局函数。

区别总结:

  • 调用方式:从对象调用静态函数需要先创建对象实例,而类本身调用静态函数直接使用类名。
  • 作用范围:从对象调用静态函数的作用范围是局部的,类本身调用静态函数的作用范围是全局的。
  • 静态函数的特点:不依赖于对象的状态,可以在任何时候调用,通常用于实现与类相关的工具函数、公共函数或者全局函数。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【JavaScript】对象 ② ( 对象使用 | 调用对象属性 | 调用对象方法 | 变量属性区别 | 函数方法区别 )

, 值 对应 属性值 ; 逗号隔开 : 多个 表示 属性 和 方法 键值对 之间 使用逗号隔开 ; 对象方法 : 表示 方法名称 键 后面的 冒号 后面 写一个 " 匿名函数 " , 如 :...) 方式 , 调用对象方法 ; // 调用对象方法 - 对象名.方法名() person.hello(); 完整代码示例 : 执行结果 : 二、变量属性区别 变量 指的是 在 全局作用域 或 局部作用域 定义 存储数据内存空间 ; var name = 'Tom'; 属性 指的是...并赋值 , 可以使用 变量名 单独使用 ; 属性 在 对象中 , 不需要声明 , 但是在使用时 , 必须 用 对象名.属性名 或者 对象名[属性名] 方式使用 ; 三、函数方法区别 函数方法相同点...: 都可以 实现 某种功能 , 做某件事 ; 函数方法不同点 : 函数 可以 单独声明存在 , 可以使用 函数名() 单独使用 ; 方法 在 对象中 , 不需要声明 , 但是在使用时 , 必须 用

9110

【C++】STL 算法 ① ( STL 算法相关头文件 | 函数对象 仿函数 简介 | 函数调用操作符 | 重写函数调用操作符 | 函数对象 普通函数区别 )

文章目录 一、STL 算法相关头文件 二、函数对象 / 仿函数 简介 1、函数对象 / 仿函数 博客回顾 2、函数调用操作符 3、函数对象 / 仿函数 - 重写函数调用操作符 4、函数对象 普通函数区别...运算符函数 ) 中 简单介绍了 " 仿函数 " 概念 ; 在结构体中 operator() 就是 重载 函数调用操作符 () 函数 ; 在 C++ 语言中 struct 结构体 class 是等同...、函数对象 / 仿函数 - 重写函数调用操作符 " 函数对象 " 是 重载 函数调用操作符 " () " , 又称为 " 仿函数 " , 它们是 行为类似函数 对象 ; " 函数对象 "...; }; 执行结果 : 4、函数对象 普通函数区别 函数对象 其 本质 是 对象 , 能突破 函数 概念 , 该类对象中 有成员变量 , 可以存储临时状态数据 ; 函数对象 / 仿函数 :...; 效率 : 普通函数通常 没有额外函数调用开销 , 但在某些情况下 , 编译器可能无法对它们进行内联优化 ; 5、函数对象 普通函数 使用场景 函数对象 普通函数 使用场景 : 函数对象

13610

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

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

1.8K50

java中对象关系区别

举个例子  我们发卷子出题都是一样 相当于一个 ,而每个同学做都相当于对象了  造汽车图纸相当于,而造出来汽车相当于对象了  每个学校老师是一个,但是具体到每个老师就是对象了  对象区别...就好像“Person(人)”这个,它虽然可以包含很多个体,但它本身不存在于现实世界上。   2,对象一个具体。它是一个实实在在存在东西。   3,是一个静态概念,本身不携带任何数据。...当一个实例化对象产生之后,可以按照如下方式进行操作: 对象.属性:表示调用之中属性; 对象.方法():表示调用之中方法。 ...30 ;//操作属性内容             per.get() ;//调用get()方法         } }  运行结果:  姓名:张三,年龄:30   那么,问题来了,以上两种不同实例化方式有什么区别呢...我们内存角度分析。首先,给出两种内存空间概念:  (1)堆内存:保存对象属性内容。

69520

Java继承重名static函数浅谈解析调用分派

,当我们用父实例引用(实际上该实例是一个子类)调用static函数时,调用是父static函数。...原因在于方法被加载顺序。 当一个方法被调用时,JVM首先检查其是不是方法。如果是,则直接调用该方法引用变量所属中找到该方法并执行,而不再确定它是否被重写(覆盖)。...如果不是,才会去进行其它操作(例如动态方法查询) 可能有的人一拍大腿,这不就是java静态/动态分派么! 有点像,但还真不是,静态分派动态分派是用来确定重载和重写逻辑。...在重载过程中,编译器根据方法参数静态类型(比如tc1静态类型是class1,tc2是class2,但本文这里不是重载!)来确定使用方法版本,这叫做静态分派。...动态分派是用于方法重写,比如我调用一个A方法f,如果该类有子类a,那么我以a来调用f时候,调用实际是a.f而非A.f。 看起来还真的像动态分派是不是?但是结果不符合啊!

1.2K30

php学习之类对象静态属性

静态变量定义 静态变量是当前所有对象共享变量,任何一个该类对象去访问它时,取得都是相同值,同样任何一个该类对象去修改它时,也时同样被修改 定义静态变量 访问修饰符 static 静态属性名...; static 访问修饰符 静态属性名; 两种方式都可以 访问静态变量 在内部访问:有两种方式 self::静态属性名; 名::$静态属性名; ?...在外部访问 如果是在外部访问今天属性,静态属性需要是public,否则也不能直接访问,访问形式是   名::$属性名 $thishe self 区别 使用方式不同 self:: $this...-> self是范畴指向,$this是对象实例,指向对象实例 静态变量使用注意事项 如果在内部去使用静态变量,有两种形式,self::$静态变量,   名::$静态变量, 静态属性可以是public... 加入游戏'; //在调用静态变量方法是self::变量名 self::$num++ ; } //定义个统计方法 public function count1(){ echo '总共有'

62100

php学习之类对象静态方法

基本介绍 当程序员需要对静态属性进行操作时,就需要定义静态方法处理,静态方法是专门操作静态属性 基本语法 class 名{ 访问修饰符 static function 函数名 (){ //函数体 }...} 说明: 静态方法是在中定义 static是关键词 静态方法是专门用于操作静态属性 静态方法可以直接用调用,形式是:名::静态方法名(参数) 小案例: <?...静态方法注意事项 在外部调用静态方法:名::静态方法名,或者对象名->静态方法名或者对象名::静态方法名,后面两种不推荐使用 在内部调用静态方法:self::静态方法名  或者名::静态方法名...年龄是 '. self::$age;//这样写也是错误 不能访问非静态属性 } //在内部调用静态方法 public function show(){ //方法一:self::方法名 self:...Person::getAge(); //在外部通过对象调用静态方法 $person = new Person('张三'); $person->getAge(); //在外部通过对象名::静态方法调用

58700

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

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

92520

Python中通过对象不能调用方法和静态方法解析

一、方法和静态方法定义在了解Python中通过对象不能调用方法和静态方法之前,首先需要明确方法和静态方法定义。...三、不能通过对象调用方法和静态方法原因既然Python中对象调用方法原理是将该对象作为第一个参数传入方法中,那么为什么不能通过对象调用方法和静态方法呢?...3.1 方法在方法中,第一个参数是cls而不是self,表示该类本身。因此,如果我们通过对象调用方法,那么实际上传入参数不是该类本身,而是该对象本身,这就会导致类型错误。...3.2 静态方法在静态方法中,不需要传入self或cls,因此,如果我们通过对象调用静态方法,实际上传入参数是该对象本身,而不是任何或实例。这就意味着,静态方法无法其中访问或实例属性或方法。...obj调用静态方法static_method(),但实际上传入该方法是obj对象本身,而不是任何或实例。

59630

【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )

静态多态 : 在编译时 , 就可以确定函数调用地址 ; 上面 多态 中示例就是静态多态示例 ; 下面的虚函数示例 , 是动态多态示例 ; 2 ....虚函数解析 : 在对象调用函数方法时 , 系统会查看该对象真正类型是什么类型 , 然后去调用对应类型方法 ; 对象是使用什么类型构造函数创建 , 其真正类型就是这个类型 , 因此最终调用该类中函数方法...Parent* parent = new Child(); //静态多态 : 在编译时 , 就可以确定函数调用地址 ; // 此时调用其 parent_method 方法 , 调用是父方法...结果分析 : ① 静态多态分析 : 第一次调用 parent_method 方法 , 虽然子重写该方法 , 但是对象类型声明是父类型 , 其仍然调用方法 ; ② 动态多态分析 : 第二次调用...= new Child(); //静态多态 : 在编译时 , 就可以确定函数调用地址 ; // 此时调用其 parent_method 方法 , 调用是父方法 parent->parent_method

85620

thinkPHP简单调用函数方法

本文实例讲述了thinkPHP调用函数方法。分享给大家供大家参考,具体如下: 手册上说很冗余,没看懂,下面简单讲一下具体用法。...函数调用: lib公共函数库叫common.php App/common/common.php 分组模块下公共函数库叫function.php App/Modules/Admin/common/function.php...调用: 代码如下 1classIndexActionextendsAction{2  publicfunctionindex(){3   // 调用“扩展基库” ThinkPHP/Extend.../Library/ORG/Util/Test.class.php4   import('ORG.Util.Test');5   $test=newTest();6   // 调用“扩展基库” ThinkPHP.../Extend/Library/Com/Util/Test.class.php7   import('Com.Util.Test');8   $test=newTest();9   // 调用“核心基

81210

【C++】入门到精通第三弹——友元函数静态成员

静态成员是被所有的共享,无论定义多少个对象。...静态成员只有一份,同时,如果一个对象修改了静态成员,那么其他对象静态成员也将改变(修改是同一个静态成员) 静态成员可以是当前类型,其他数据成员只能是当前指针或应用类型,在定义成员时...静态成员函数只能访问静态成员,而不能访问普通数据成员。 而且静态成员函数不能定义为const成员函数,如果函数实现代码位于体之外,则在函数实现部分不能再标识static关键字。...此外,全局函数也可以作为友元,一样可以访问私有成员。 最后简单来谈一下 友元函数在访问对象成员时,不需要通过对象名。...友元函数没有this指针,如果不通过对象名就无法找到对象非static成员,也就无法访问。但是当访问对象static成员时,就可以不用通过对象名访问。

17810

内部类静态内部类区别_禁止序列化非静态内部类

静态内部类和非静态内部类区别 主要区别有三点:定义、访问和声明 定义 静态内部类中可以定义变量、方法、常量、成员变量和方法;非静态内部类只能定义常量、成员变量和方法 访问...静态内部类只能访问外部类静态成员变量和静态方法,并且不能引用外部类对象(this);非静态内部类可以访问外部类所有成员和方法 声明 声明静态内部类时,不依赖于外部类对象;声明非静态内部类时,...依赖于外部类对象 # 静态内部类 OutClass.InnerClass innerClass = new OutClass.InnerClass(); # 非静态内部类 OutClass.InnerClass...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

50010

函数式编程面向对象编程: 静态类型语言表达力 静态类型语言动态类型语言函数式编程面向对象编程: 静态类型语言表达力 静态类型语言动态类型语言

函数式编程面向对象编程[2]: 静态类型语言表达力 静态类型语言动态类型语言 之剑 2016.5.3 21:43:20 ---- 像Java或者C#这样强类型静态语言在实现复杂业务逻辑、开发大型商业系统...其实静态类型语言,除了性能方面的考量之外,最大优势就是可以提供静态类型安全,编译器可以检查你每一个函数调用是不是书写了正确名字,是不是提供了正确类型参数。...,如果要学习一种新写代码思路,面向函数语言是目前最好选择了,而Haskell有是函数式语言先驱和集大成者,很多函数式语言语法都是Haskell借鉴来。...Scala从一开始就是一门设计良好语言,几乎完美的集合了函数特性和面向对象特性,虽然他函数式不是纯函数式。...其面向对象感觉更像Ruby而不是Java,所有的东西都是对象,包括简单类型例如Int,以及函数本身都是一种对象,这样在这个层面实现了面向对象函数统一。

1.4K10

【C++】继承 ⑧ ( 继承 + 组合 模式对象 构造函数 和 析构函数 调用规则 )

一、继承 + 组合 模式对象 构造函数和析构函数调用规则 1、场景说明 如果一个 既 继承了 基 , 又 在中 维护了一个 其它类型 成员变量 , 那么 该类 构造 析构 , 就需要涉及到... 本身 构造函数 和 析构函数 , 父 构造函数 和 析构函数 , 成员变量 构造函数 和 析构函数 ; 2、调用规则 在 继承 + 组合 情况下 , 构造函数 析构函数 调用规则如下...自身定义 构造函数 ; 析构函数 : 自身 -> 成员 -> 父 ; 首先 , 调用 自己 析构函数 ; 自身定义 析构函数 ; 然后 , 调用 成员 析构函数 ; 也就是 成员变量 类型...<< "C 析构函数调用" << endl; } public: int z; D d; }; 可根据下面的调用规则 , 分析出 C 对象中 , 涉及到构造/析构函数 , 自身构造/析构函数...; A 和 B 构造函数 , 是 父构造函数 ; D 构造函数 , 是 成员构造函数 ; C 构造函数 , 是 自身构造函数 ; 构造函数调用顺序为 : 父 -> 成员 -> 自身 , 符合上述调用原则

15410

Python多线程编程基础3:创建线程调用函数区别

在上一节Python多线程编程基础2:如何创建线程中,我们已经知道,创建线程并运行实际上也是执行一段代码,那么把这些代码封装到函数中之后,直接调用函数和创建线程再运行有什么区别呢?...这是本文要解释内容。...简单地说,调用函数属于阻塞模式,必须要等函数运行结束并返回之后才能执行后面的代码;而线程属于并发非阻塞模式,创建并启动子线程之后子线程和主线程并发执行,除非有现成同步代码和机制。...下面代码首先定义一个函数,然后调用这个函数函数执行结束之后再继续执行后面的代码: from threading import Thread from time import sleep def demo...(n): sleep(n) print(n) demo(3) print('ok') 运行结果为: 3 ok 而下面的代码首先定义函数,然后创建线程来执行这个函数代码: from threading

1.2K80

【C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 拷贝构造函数 析构函数 调用情况分析 )

一、匿名函数 拷贝构造函数 1、匿名函数回顾 在上一篇博客 【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 ) 中 , 分析了匿名函数几种用法..., 以及不同使用场景下 , 匿名对象 创建销毁情况 ; C++ 编译器 发现 使用 匿名对象 时 , 会根据 匿名对象 用法 , 决定对 匿名对象 处理 ; 匿名对象单独使用 : 如果只是单纯使用...// 自动调用拷贝构造函数 Student s2 = s1; ③ 对象值作为函数参数 : 实例对象 以值方式 传递给函数 , 不是以 指针 或 引用 方式 ; // 定义函数, 接收 Student...是 对象值 类型 , 不是 对象 引用 或 指针 类型 时 , 返回 返回值 是一个 匿名对象 ; // 函数返回值是 Student 类型对象 Student fun() { Student...s(12, 190); return s; } 上述函数中执行操作分析 : 首先 , 调用 Student 2 参数构造函数 , 创建 Student 普通对象 , 初始化变量 s ; 然后

22520

转--面向对象角度看Go语言Java语言区别

Go语言风格 GO语言是支持并发编程和内存垃圾回收编译型静态类型语言,运行效率高,具有较强可伸缩性(scalable)。它是为软件工程服务而进行语言设计,强制语言规范。...Go语言JAVA语言区别 类型系统:JAVA中有两套完全独立类型系统,一套是值类型系统,byte、int、boolean、char、double另一套是以object类型为根对象类型系统,Integer...初始化:Java中有默认构造函数或者用户自定义构造函数,在Go中不需要,可以自定义一个普通函数。...而GO语言中采用是非侵入式接口,一个只需要实现接口要求所有函数,那我们就说该类实现了该接口。GO语言可以通过接口进行接口查询(接口指向对象是否实现了另外接口),类型查询等。...多态:Java中多态实现遵循一个原则:当超对象引用变量引用子类对象时,被引用对象类型而不是引用变量类型决定了调用成员方法,但是这个被调用方法必须是在超中定义过,也就是说被子类覆盖方法

1.4K60
领券