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

C++中的非成员函数与静态函数

C++中的非成员函数(non-member function)和静态函数(static function)是C++中常用的函数类型。

非成员函数是指不隶属于任何类或对象的函数。它们可以在全局范围内定义,或者在命名空间中定义。非成员函数没有访问特定对象的权限,因此不能直接访问类的成员变量或非静态成员函数。非成员函数常用于对某个数据类型进行操作或提供全局的工具函数。

静态函数是指隶属于类而不是对象的函数。它们可以通过类名来调用,无需通过对象实例。静态函数不依赖于任何特定对象的状态,因此不能直接访问非静态成员变量或非静态成员函数,只能访问静态成员变量或静态成员函数。静态函数常用于对某个类的静态成员进行操作或提供全局的工具函数。

非成员函数与静态函数的主要区别如下:

  1. 归属不同:非成员函数不属于任何类或对象,静态函数属于类而不是对象。
  2. 访问权限不同:非成员函数无法直接访问类的成员变量或非静态成员函数,静态函数只能访问静态成员变量或静态成员函数。
  3. 调用方式不同:非成员函数可以在全局范围内调用或通过命名空间进行调用,静态函数通过类名调用。

非成员函数和静态函数在实际应用中有各自的优势和应用场景。

  1. 非成员函数适用于不依赖于特定对象的操作或全局工具函数,可以提高代码的可重用性和可维护性。
  2. 静态函数适用于对于类的静态成员进行操作或提供全局工具函数,可以简化函数调用的方式,提高代码的可读性和易用性。

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

  1. 腾讯云函数计算(SCF):腾讯云函数计算(Serverless Cloud Function)是一种无服务器的计算服务,支持在云端运行函数,无需关心服务器管理。详情请参考:https://cloud.tencent.com/product/scf
  2. 腾讯云云原生容器服务(TKE):腾讯云原生容器服务(Tencent Kubernetes Engine)是一种高度可扩展的容器化部署和管理服务,用于简化容器的构建、部署和运维。详情请参考:https://cloud.tencent.com/product/tke
  3. 腾讯云CDN加速(CDN):腾讯云CDN加速(Content Delivery Network)是一种全球分布式部署的内容分发网络,用于加速网站、应用、音视频等内容的传输和分发。详情请参考:https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

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

1.2K20

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

一个静态成员函数不与任何对象相联系,故不能对静态成员进行默认访问。 它们根本区别在于静态成员函数没有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.8K90

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

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ , 静态成员函数 是一种 特殊函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...: 即使 没有创建 类 实例对象 , 也可以 通过 类名:: 调用 类定义 静态成员函数 ; 静态成员函数作用 : 静态成员函数 通常用于 执行类本身相关操作 , 执行该函数 不涉及到 类实例对象信息...进行 ; 在 Student 类定义静态成员函数 , 使用 static 关键字修饰函数 ; 注意 : 不要在 静态函数 访问 静态成员 , 否则会报错 " 对静态成员“Student::m_age...”非法引用 " ; static void fun() { // 静态成员函数 访问静态成员会报错 // error C2597: 对静态成员“Student::m_age”非法引用... 访问静态成员会报错 // error C2597: 对静态成员“Student::m_age”非法引用 //m_age = 10; cout << "静态成员函数被调用 : number

61220

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

在类数据成员成员函数定义或声明前以static关键词开头,即构成静态数据成员静态成员函数。...int minute; int sec; }; 2.静态数据成员意义 C++为什么要进入静态数据成员这个概念,或者它有什么好处。...我们可以这样理解这件事,在构造函数博客里提到:类构造函数在实例化对象时被系统调用,然后实现对成员数据赋值工作,显然这些数据成员属于对象。而静态数据成员属于类,不属于任何一个对象。...由于静态成员函数只能访问本类静态数据成员,而无法访问静态数据成员,这样使程序设计更加清晰。 3.静态数据成员特性 (1)静态成员函数属性: 静态成员函数属于类,而不属于某一个对象。...(2)静态成员函数访问: 静态成员函数只能访问本类静态数据成员静态成员函数可以访问本类静态数据成员静态数据成员

1.5K50

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

我们需要一个成员为所有对象所公有,而且在需要更新这个公有属性时候只需修改一次。 因此,C++提供了静态数据成员来描述类对象相同属性。...在类定义时候静态数据成员是不分配内存,只有在创建类对象时候才分配内存,但静态数据成员是要分配内存,因为它是属于类,只有一块内存,所以要初始化它,而且不能在类声明初始化,必须要在类外初始化...静态成员函数 一般都是在静态成员函数修改静态数据成员,在刚刚手机类声明成员函数: static void change(); 就是静态成员函数。...我们给它来一个类外定义: void redmik30pro::change() { battery-=10; } 要注意是,静态成员函数只能访问静态数据成员静态成员函数,不能访问静态数据成员,如果要访问静态数据成员...但是非静态成员函数可以任意地访问静态成员函数静态数据成员。 那静态成员函数存在意义是什么?

17430

C++静态成员变量和静态成员函数小结

静态成员包括静态数据成员静态函数成员两部分。 一 静态数据成员: 类体数据成员声明前加上static关键字,该数据成员就成为了该类静态数据成员。...即派生类对象基类对象共享基类静态数据成员。..._num<<endl; } // 结果为1,2;可见派生类基类共用一个静态数据成员。 3.静态数据成员可以成为成员函数可选参数,而普通数据成员则不可以。...★这个特性,我不知道是属于标准c++特性,还是vc6自己特性。 静态数据成员值在const成员函数可以被合法改变。...(base::*pf2)()=&base::func2;//成员函数指针 2.静态成员函数不可以调用类静态成员

1.9K50

C++成员函数 | 成员函数

C++成员函数性质 在C++,类成员函数函数一种,它有返回值和函数类型,它与一般函数区别只是:  属于一个类成员,出现在类体。...C++在使用类函数时,要注意调用它权限以及它作用域,私有的成员函数只能被本类其他成员函数所调用,而不能被类外调用,成员函数可以访问本类任何成员,可以引用在本作用域中有效数据。 ...在C++,有的函数并不是准备为外界调用,而是为本类成员函数所调用,就应该将它们指定为 private。...这种函数作用是支持其他函数操作,是类其他成员函数,类外用户不能调用这些私有的函数。  类成员函数是类体十分重要部分。...C++类外定义成员函数 上述所讲成员函数是在类体定义,在C++也可以在类体只写成员函数声明,而在类外面进行函数定义。

1.9K74

《挑战30天C++入门极限》C++静态数据成员静态成员函数

C++静态数据成员静态成员函数   在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象程序是由对象构成,我们如何才能在类范围内共享数据呢...这个问题便是本章重点:   声明为static成员或者成员函数便能在类范围内共同享,我们把这样成员称做静态成员静态成员函数。   ...以下程序我们来做一个模拟访问例子,在程序,每建立一个对象我们设置静态成员变自动加一,代码如下: #include using namespace std;...便运行加1操作,静态成员初始化应该在主函数调用之前,并且不能在类声明中出现,通过运行过程观察我们发现,静态成员count状态并不会随着一个新对象新建而重新定义,尽而我们了解到静态成员函数由于对象无关系...;//错误 cout<<count<<endl; }   静态成员函数普通成员函数差别就在于缺少this指针,没有这个this指针自然也就无从知道name是哪一个对象成员了。

69330

C++一分钟之-C++静态成员静态函数

C++编程静态成员静态函数是类设计重要概念,它们打破了常规成员“每个对象一份”规则,为类所有实例共享同一份数据或行为提供了途径。...静态成员函数 基本概念 静态成员函数不依赖于类任何实例,它可以通过类名直接调用,不接收隐含this指针。 用途 工具函数:执行类相关操作,但不需要访问静态成员。...访问静态成员:操作静态成员变量理想场所。 常见问题避免 误用this指针:静态成员函数不存在this指针,尝试使用会导致编译错误。...避免策略:确保静态函数不操作静态成员,或改用普通成员函数。 功能混淆:将静态函数误用作实例方法,导致逻辑混乱。 避免策略:明确区分静态函数和实例方法功能,前者不涉及对象状态变化。...通过本文介绍和示例,希望你能准确把握静态成员静态函数精髓,避开常见陷阱,更加自信地在C++项目中运用它们。

15710

C++静态成员变量和静态成员函数学习总结

今天继续分享c++文章,学习还是不能落下,flag未完成,任务艰巨,好好学习。...一、静态成员变量: 平时我们在写类时候,类成员变量,我们一般是通过对象名来访问public成员变量,一般private(私有)成员变量,对象是不能直接访问;同时我们要明白每个对象成员变量都是专属...1、c++可以定义静态成员变量: 静态成员变量属于整个类所有 静态成员变量生命期不依赖于任何对象(上面的程序,每个对象成员变量是独立,所以打印出mCount值分别为1) 可以通过类名直接访问公有静态成员变量...1、在C++可以定义静态成员函数静态成员函数是类特殊成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 2、静态成员函数定义: 直接通过...4、小结: 静态成员函数是类特殊成员函数 静态成员函数没有隐藏this参数 静态成员函数可以通过类名直接访问 静态成员函只能直接访问静态成员变量(函数) 三、总结: 好了,今天分享就到这里,如果文章中有错误或者不理解地方

58430

C++const成员变量和成员函数

在类,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量函数名字通常以get开头,后跟成员变量名字,所以通常将它们称为 get 函数。...函数头部结尾加上 const 表示常成员函数,这种函数只能读取成员变量值,而不能修改成员变量值,例如char * getname() const。

23930

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

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

95820

C++const和const对象分别调用const和const成员函数

一、先来提出问题 const对象可以调用const成员函数吗? const对象可以调用const成员函数吗? const成员函数内可以调用其它const成员函数吗?...const成员函数内可以调用其他const成员函数吗?...二、实践出真知 1、const对象可以调用const成员函数 2、const对象不能调用const成员函数 3、const对象可以调用const成员函数 4、const对象可以调用const成员函数...5、const成员函数不能调用const成员函数 6、const成员函数可以调用const成员函数 我们知道c++在类成员函数还会隐式传入一个指向当前对象this指针,所以在test类,...* this; 是和void print() const;this指针类型是一样,所以常量对象可以调用const成员函数

1.3K20

银行账户(静态成员友元函数

友元函数声明形式为 friend void Update(Account& a); 在main函数,定义一个Account类型指针数组,让每个指针指向动态分配Account对象,并调用成员函数测试存款...大家可以根据实际需求在类内添加新成员 要求所有和银行账户相关数据都不能用全局变量形式,必须封装在类内。...可以看到这个类声明函数成员还是比较多,但是我们还需要往里面添加成员函数。...由于它三个静态数据成员被定义成了私有成员,我们只能通过成员函数去修改它,但原类声明,并没有带之对应参数成员函数,于是我们需要添加成员函数,一般修改静态数据成员都通过静态成员函数来修改,当然静态成员函数也可以修改...有一个问题是之前从来没有考虑过,注意到题目中说,在main函数,定义一个Account类型指针数组,让每个指针指向动态分配Account对象,由于数组长度是未知,于是我们需要new出来,这意味着我们需要先

17340

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

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

68020

C++C++ this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ , 普通静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类 , 定义了 void fun(int...函数 第一个参数 Student* pThis 指针指向内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age...使用 const 关键字 修饰成员函数 , 会将 成员函数 转化为 " 常量成员函数 " ; " 常量成员函数 " 操作限制 : 不能修改成员变量 : 不能修改 任何 成员变量 值 , 静态成员变量... 静态普通成员变量 都不能修改 ; 不能调用非常量成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常量成员函数 , 以保证不会修改 成员变量 ; " 常量成员函数 " 只能访问 常量成员变量...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数 不能修改 类对象 任何成员变量 ; class Student { public: void fun

19420
领券