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

成员函数与非成员函数?

成员函数与非成员函数是C++中的概念,它们是定义在类中的函数。

成员函数是定义在类中的函数,它可以访问类的成员变量和成员函数。成员函数可以是普通函数、静态函数、虚函数、构造函数、析构函数等。

非成员函数是定义在类外部的函数,它不能访问类的成员变量和成员函数,但可以通过对象或指针来调用类的成员函数。非成员函数可以是普通函数、友元函数等。

在C++中,成员函数和非成员函数的使用取决于具体的需求和场景。如果需要访问类的成员变量和成员函数,则应该使用成员函数;如果不需要访问类的成员变量和成员函数,则可以使用非成员函数。

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

  • 腾讯云CVM:腾讯云云服务器,提供高性能、稳定、安全、易管理的计算服务。
  • 腾讯云CLB:腾讯云负载均衡,提供高可用、高性能、稳定可靠的流量分发服务。
  • 腾讯云COS:腾讯云对象存储,提供安全、可靠、高效、低成本的存储服务。
  • 腾讯云CDN:腾讯云内容分发网络,提供高速、稳定、安全、快速部署的内容分发服务。
  • 腾讯云CDB:腾讯云关系型数据库MySQL,提供高可用、高性能、稳定可靠的数据库服务。
  • 腾讯云CNS:腾讯云内网DNS,提供稳定、可靠、安全的内网DNS服务。
  • 腾讯云CAM:腾讯云访问管理,提供细粒度的权限管理、策略管理、审计日志等功能。
  • 腾讯云CLS:腾讯云日志服务,提供高性能、稳定、安全、易管理的日志收集和分析服务。
  • 腾讯云TKE:腾讯云容器服务,提供高性能、稳定、安全、易管理的容器管理服务。
  • 腾讯云EKS:腾讯云托管Kubernetes集群,提供高性能、稳定、安全、易管理的容器管理服务。
  • 腾讯云TCI:腾讯云直播,提供高性能、稳定、安全、易管理的直播服务。
  • 腾讯云TMS:腾讯云内容安全,提供高效、稳定、安全的内容审核和安全防护服务。
  • 腾讯云TMT:腾讯云机器翻译,提供高效、稳定、安全的自动翻译服务。
  • 腾讯云IoT Explorer:腾讯云物联网套件,提供高性能、稳定、安全、易管理的物联网服务。
  • 腾讯云IoTHub:腾讯云IoT Hub,提供高性能、稳定、安全、易管理的物联网消息通信服务。
  • 腾讯云TKE RegisterNode:腾讯云TKE RegisterNode,提供高性能、稳定、安全、易管理的Kubernetes集群注册服务。
  • 腾讯云SSL:腾讯云SSL证书,提供高性能、稳定、安全、易管理的SSL证书服务。
  • 腾讯云SMS:腾讯云短信,提供高
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

: 即使 没有创建 类 的 实例对象 , 也可以 通过 类名:: 调用 类中定义的 静态成员函数 ; 静态成员函数作用 : 静态成员函数 通常用于 执行类本身相关的操作 , 执行该函数 不涉及到 类实例对象中的信息...调用 静态成员函数 s.fun(); 4、静态成员函数只能访问静态成员 静态成员函数内容要求 : 静态成员函数 只能访问 静态成员变量 其他静态成员函数 静态成员函数 不能访问 静态成员变量 或 静态成员函数...静态成员 ; 如果在静态成员函数中 , 访问静态成员 , 会报如下错误 : 1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------ 1>Hello.cpp...进行的 ; 在 Student 类中定义静态成员函数 , 使用 static 关键字修饰函数 ; 注意 : 不要在 静态函数中 访问 静态成员 , 否则会报错 " 对静态成员“Student::m_age...”的非法引用 " ; static void fun() { // 静态成员函数 中 访问静态成员会报错 // error C2597: 对静态成员“Student::m_age”的非法引用

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

    静态成员函数名 (实参表) ; 注意 类外定义静态成员函数时,定义格式和普通成员函数定义格式相同,不再使用static修饰; 使用对象名和成员运算符(.)调用成员函数时,并非该函数属于某一对象,只是类对象间的桥梁...,为了能处理静态数据成员; 静态成员函数不能默认引用本类静态数据成员的原因: 当调用一个对象的静态成员函数时,系统会将该对象的起始地址赋予成员函数的this指针。...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问类的默认静态成员静态成员函数静态数据成员)。...//静态成员函数的类外定义 参数表中创建对象 cout << "x=" << m.x << endl; //静态<em>成员</em><em>函数</em>通过对象访问<em>非</em>静态数据<em>成员</em> cout << "y=" <...<em>非</em>静态<em>成员</em> ; 类名 :: <em>非</em>静态<em>成员</em> ; 故:实例化对象即可完成对<em>非</em>静态数据<em>成员</em>的访问

    1.2K20

    C++类的成员函数 | 成员函数

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

    1.9K74

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

    在类中的数据成员成员函数定义或声明前以static关键词开头,即构成静态数据成员静态成员函数。...我们可以这样理解这件事,在构造函数的博客里提到:类中的构造函数在实例化对象时被系统调用,然后实现对成员数据的赋值工作,显然这些数据成员属于对象。而静态数据成员属于类,不属于任何一个对象。...静态成员函数 和静态数据成员类似,静态成员函数一样也是在前面加入static关键字。...由于静态成员函数只能访问本类中的静态数据成员,而无法访问静态数据成员,这样使程序设计更加清晰。 3.静态数据成员的特性 (1)静态成员函数的属性: 静态成员函数属于类,而不属于某一个对象。...(2)静态成员函数的访问: 静态成员函数只能访问本类中的静态数据成员静态成员函数可以访问本类中的静态数据成员静态数据成员

    1.5K50

    成员函数&&构造函数&&析构函数

    类的6个默认成员函数 构造函数 概述 定义 特性 析构函数 概述 特性 类的6个默认成员函数 空类: 如果一个类里面什么都没有写,我们称之为空类 class Date {}; 空类真的什么都没有吗?...实际上并非如此,编译器会自动生成6个默认成员函数。 默认成员函数: 用户没有显示实现,编译器自动生成的额成员函数。...定义 构造函数是一个特殊的成员函数, 名字类名相同, 创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。...特性 构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。 函数类名相同。 无返回值。...**析构函数:**构造函数功能相反,析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成对象中资源的清理工作。

    9310

    运算符成员函数友元函数重载

    本文只介绍一下运算符重载的两种方式,成员函数重载和友元函数重载,并不具体到某些运算符的具体案例。...成员函数重载(上一篇文章一致): #include using namespace std; class Complex { public: Complex(int x, int y) :_x(x)...// 此句等同于 c3 = c1.operator+(c2) Complex c3 = c1 + c2; c3.display(); return 0; } 友元函数重载,成员函数不同的是...,全局的友元函数需要传递两个参数,因为他并没有在类中,所以成员函数的this必须转化一个为operator+的参数,否则无法完成函数功能: #include using namespace std;...,类的成员函数不同的是,this变成了left参数 Complex operator+(Complex& left, Complex& right) { return Complex(left.

    22540

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

    静态成员是“类级别”的,也就是它和类的地位等同,而普通成员是“对象(实例)级别”的。类级别的成员,先于该类任何对象的存在而存在,它被该类所有的对象共享。 其定义方式全局变量相同。...即派生类对象基类对象共享基类的静态数据成员。..._num<<endl; } // 结果为1,2;可见派生类基类共用一个静态数据成员。 3.静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以。...1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。...(base::*pf2)()=&base::func2;//成员函数指针 2.静态成员函数不可以调用类的静态成员

    1.9K50

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

    const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。...需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

    25130

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

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

    17930

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

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

    17640

    C++inline | inline成员函数

    C++inline成员函数 C++类的成员函数可以指定为内置函数,在类体中定义的成员函数的规模一般都很小,而系统调用函数的过程所花费的时间开销相对是比较大的。...C++调用一个函数的时间开销远远大于小规模函数体中全部语句的执行时间,为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++会自动将它们作为内置函数 处理。...在程序调用这些成员函数时,并不是真正地执行函数的调用过程,而是把函数代码嵌入程序的调用点,这样可以大大减少调用成员函数的时间开销。...C++要求对一般的内置函数用关键字inline声明,但对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。...,而在类体外定义,系统并不会默认为内置函数,调用这些成员函数的过程和调用一般函数的过程是相同的,如果想将这些成员函数指定为内置函数,应当用inline作显式声明。

    980104

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

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

    96620

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

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

    68320

    C++:30 ---C++类成员成员函数的内存布局

    前面两篇文章我相信大家反复读了之后对这节不陌生了: 首先来看代码: class Demo { public: //静态成员变量 static const int sx = 0; //静态函数...static void SF1() { } public: //成员变量 int x; public: //成员函数 void F1() { cout << "I'm...:" << std::hex << std::showbase << ut.addr << endl; ut.f = &Demo::F2; cout << "成员函数F2()的地址是 :...这里要指出的是大家可以看到静态成员函数和静态成员变量sx的地址都是0x00007FF开头的,实际上他们都在全局数据区域存储(全局变量,静态变量),如果你有耐心,可以断点查看下栈空间内的局部变量i的地址:...我想你现在根据刚才打印的成员变量,成员函数,虚函数表地址已经可以自己画出类成员的内存布局了。

    1.2K20
    领券