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

隐藏成员函数的实现(如静态全局函数)

隐藏成员函数的实现是指将函数的定义和实现放在类的私有部分,使其对外部不可见。这样做的目的是封装类的内部实现细节,提高代码的安全性和可维护性。

隐藏成员函数的实现可以通过以下几种方式实现:

  1. 静态全局函数:将函数定义为类的私有静态成员函数,只能在类的内部调用。静态全局函数没有this指针,只能访问类的静态成员变量和静态成员函数。这种方式适用于不需要访问类的非静态成员的情况。
  2. 友元函数:将函数声明为类的友元函数,可以在类的外部直接调用该函数,且可以访问类的私有成员。友元函数可以是全局函数,也可以是其他类的成员函数。这种方式适用于需要访问类的私有成员的情况。
  3. 内部类:将函数定义为类的内部类的成员函数,只能在内部类的范围内调用。内部类可以访问外部类的私有成员,但外部类不能直接访问内部类的成员。这种方式适用于需要访问外部类私有成员并且需要封装实现细节的情况。

隐藏成员函数的实现可以提高代码的安全性,防止外部直接访问和修改类的内部实现细节。同时,隐藏成员函数也有助于提高代码的可维护性,当类的内部实现发生变化时,只需要修改类的内部实现,而不需要修改外部调用该函数的代码。

腾讯云提供了一系列云计算相关的产品,包括云服务器、云数据库、云存储等,可以满足不同场景下的需求。具体推荐的产品和产品介绍链接地址可以根据实际需求和情况进行选择。

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

相关·内容

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

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象...: 即使 没有创建 类 实例对象 , 也可以 通过 类名:: 调用 类中定义 静态成员函数 ; 静态成员函数作用 : 静态成员函数 通常用于 执行与类本身相关操作 , 执行该函数 不涉及到 类实例对象中信息..., 也不能在 静态成员函数 中访问 普通 成员变量 和 成员函数 ; 2、静态成员函数声明 静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通成员函数 转为 静态成员函数...; : 下面的 void fun() 普通成员函数 , 在 函数之前添加 static 关键字 , static void fun() 就变成了 静态成员函数 ; class Student {..., 普通 成员变量 和 成员函数 , 需要 通过 类 实例对象 来访问 , 需要 依托于 对象才能存在 , 而 静态成员函数 可以在 不创建 实例对象前提下被调用 , 因此 静态成员函数中 不能访问

1K20

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

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

    在类中数据成员成员函数定义或声明前以static关键词开头,即构成静态数据成员静态成员函数。...静态数据成员可以实现一个类中不同对象某个数据值是一样。比如一个类中包含数据成员有:班级,姓名,学号,性别。那么对于一个班几个同学,班级值一定是一样。...我们可以这样理解这件事,在构造函数博客里提到:类中构造函数在实例化对象时被系统调用,然后实现成员数据赋值工作,显然这些数据成员属于对象。而静态数据成员属于类,不属于任何一个对象。...1.静态成员函数实现 class Time { public : static void showtimeh();//定义showtimeh()为静态成员函数 void showtime...(2)静态成员函数访问: 静态成员函数只能访问本类中静态数据成员。 非静态成员函数可以访问本类中静态数据成员与非静态数据成员

    1.5K50

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

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

    18730

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

    初始化: 类型 类名 :: 静态数据成员 = 初始化值 ; 详解:静态数据成员必须在类外初始化,不可在类体内,因为:构造函数中,如果可以,则每次建立对象,都会对静态数据成员值进行修改,这违背静态数据成员使用目的...静态成员函数名 (实参表) ; 注意 类外定义静态成员函数时,定义格式和普通成员函数定义格式相同,不再使用static修饰; 使用对象名和成员运算符(.)调用成员函数时,并非该函数属于某一对象,只是类与对象间桥梁...,为了能处理静态数据成员静态成员函数不能默认引用本类非静态数据成员原因: 当调用一个对象静态成员函数时,系统会将该对象起始地址赋予成员函数this指针。...然而,静态成员函数不属于对象,无this指针。所以静态成员函数不能访问类默认非静态成员(非静态成员函数和非静态数据成员)。...只要对静态数据成员值更新一次,就可以保证所有对象都会存取更新后值 由本例可知:静态成员函数不能引用本类非静态成员并非绝对,只是不可以进行默认访问,因为编译器不知道应该去寻找哪一个对象。

    1.3K20

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

    静态成员包括静态数据成员静态函数成员两部分。 一 静态数据成员: 类体中数据成员声明前加上static关键字,该数据成员就成为了该类静态数据成员。...静态数据成员实际上是类域中全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正分配内存,而定义是一定要分配内存。...静态成员是“类级别”,也就是它和类地位等同,而普通成员是“对象(实例)级别”。类级别的成员,先于该类任何对象存在而存在,它被该类所有的对象共享。 其定义方式与全局变量相同。...二,静态成员函数 静态成员函数没有什么太多好讲。...1.静态成员函数地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。

    1.9K50

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

    下面我们来做一个小程序需求来慢慢引出静态成员变量: 统计在程序运行期间某个类对象数目 要保证该程序安全性(不能使用全局变量) 随时可以获取当前对象数目 代码版本一: #include <stdio.h...所有对象共享类静态成员变量 可以通过对象名 访问公有静态成员变量 2、静态成员变量特性: 在定义时直接通过static关键字修饰 静态成员变量需要在类外单独分配空间 静态成员变量在程序内部位于全局数据区...静态成员变量隶属于类所有 每个对象都可以访问静态成员变量 静态成员变量在全局数据区分配空间 静态成员变量生命期是在程序运行期间 二、静态成员函数: 刚刚程序版本二里面其实我们还有一个功能没实现完:随时可以获取当前对象数目...1、在C++中可以定义静态成员函数静态成员函数是类中特殊成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 2、静态成员函数定义: 直接通过...4、小结: 静态成员函数是类中特殊成员函数 静态成员函数没有隐藏this参数 静态成员函数可以通过类名直接访问 静态成员函只能直接访问静态成员变量(函数) 三、总结: 好了,今天分享就到这里,如果文章中有错误或者不理解地方

    59130

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

    C++成员函数性质 在C++中,类成员函数函数一种,它有返回值和函数类型,它与一般函数区别只是:  属于一个类成员,出现在类体中。...C++在使用类函数时,要注意调用它权限以及它作用域,私有的成员函数只能被本类中其他成员函数所调用,而不能被类外调用,成员函数可以访问本类中任何成员,可以引用在本作用域中有效数据。 ...这种函数作用是支持其他函数操作,是类中其他成员函数,类外用户不能调用这些私有的函数。  类成员函数是类体中十分重要部分。...C++类外定义成员函数 上述所讲成员函数是在类体中定义,在C++中也可以在类体中只写成员函数声明,而在类外面进行函数定义。...//作用域限定符 ∷ 在C++中,用作用域限定符声明函 数是属于哪个类,如果在作用域运算符前面没有类名,或者函数名前面既无类名又无作用域限定符,则表示函数不属于任何类,这个函数不是成员函数,而是全局函数

    1.9K74

    #抬抬小手学Python# 类函数成员函数静态函数、抽象函数、方法伪装属性

    十五、类函数成员函数静态函数、抽象函数、方法伪装属性 本篇博客是滚雪球学 Python 第二轮最后一篇博客,我们将内容继续提升到面向对象部分,为你补充类里面的一些装饰器,学习之后,希望你 Python...静态函数第一个参数不是实例对象 self,或者可以理解为静态函数没有隐形参数,如需要传递参数,在参数列表中声明即可。...15.3 类函数静态函数在继承类中表现 --------------------- 先创建一个父类,其中包含两个静态函数与一个类函数。..., 如果在子类中没有覆盖父类静态函数,那调用时使用是父类静态函数, 类函数同样遵循该规则。...如果希望在子类中调用父类属性或者函数,请使用 父类名. 形式实现

    1.1K30

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

    题目描述 银行账户类基本描述如下: 要求如下: 实现该银行账户类 为账户类Account增加一个友元函数实现账户结息,要求输出结息后余额(结息余额=账户余额+账户余额*利率)。...友元函数声明形式为 friend void Update(Account& a); 在main函数中,定义一个Account类型指针数组,让每个指针指向动态分配Account对象,并调用成员函数测试存款...大家可以根据实际需求在类内添加新成员 要求所有和银行账户相关数据都不能用全局变量形式,必须封装在类内。...可以看到这个类声明函数成员还是比较多,但是我们还需要往里面添加成员函数。...由于它三个静态数据成员被定义成了私有成员,我们只能通过成员函数去修改它,但原类声明中,并没有带与之对应参数成员函数,于是我们需要添加成员函数,一般修改静态数据成员都通过静态成员函数来修改,当然非静态成员函数也可以修改

    18140

    C++ Trick:小心,子类隐藏父类成员函数

    按常理来说,如果父类成员函数是public,那么子类应该也能直接调用父类定义函数,所谓“继承”也便是这个含义。...父类有个成员函数set_birth,接收一个string类型,设置生日。比如"1990/10/10"。子类可以直接调用set_birth。 “这有什么值得一说?”...您接着瞧,如果子类现在需要实现一个传入int类型set_birth呢?...果然,子类已经无法调用父类public成员函数了。明明刚才还可以,怎么set_birth(string)对子类突然不可见了呢? 奥秘在于,子类重载了父类同名函数。...此时父类函数确实对子类是不可见…… 这其实不是一个复杂知识点,只是容易让人稍不留意就遗忘。 解决方案是什么呢?其实也不难,想办法让父类同名函数对子类可见!

    1.8K10

    C++面向对象友元,全局函数、类、成员函数做友元

    在程序里,有些私有属性 也想让类外特殊一些函数或者类进行访问,就需要用到友元技术 友元目的就是让一个函数或者类 访问另一个类中私有成员 友元关键字为 ==friend== 友元三种实现 全局函数做友元...类做友元 成员函数做友元 全局函数做友元 class Building { //告诉编译器 goodGay全局函数 是 Building类好朋友,可以访问类中私有内容 friend void...string m_SittingRoom; //客厅 private: string m_BedRoom; //卧室 }; void goodGay(Building * building)//全局函数...告诉编译器 goodGay类是Building类好朋友,可以访问到Building类中私有内容 可以设置类与类之间访问权限 成员函数做友元 class Building; class goodGay...private: Building *building; }; class Building { //告诉编译器 goodGay类中visit成员函数 是Building好朋友,可以访问私有内容

    37920

    【C++】继承——切片、隐藏、默认成员函数、菱形

    (在子类成员函数中,可以使用基类::基类成员显示访问) 需要注意是如果是成员函数隐藏,只需要函数名相同就构成隐藏。 注意在实际中在继承体系里面最好不要定义同名成员。...重定义、隐藏?编译报错???? 看到函数名相同,参数不同,有人会认为是函数重载,但是函数重载要求要在同一作用域!所以不是重载。所以答案是隐藏。...,隐藏了父类fun函数,此时子类需要传参,如果想访问,要加上作用域,即b.A::fun() 对于成员函数,只要父类和子类同名成员函数函数名相同就构成了隐藏。...---- 五、继承与友元 友元关系不能继承: 正确做法: ---- 六、继承与静态成员 基类定义了static静态成员,则整个继承体系里面只有一个这样成员。...,而静态成员是属于整个类,属于类所有对象,同时属于所有派生类及对象。

    37930

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

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

    68620

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

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

    98920

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

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

    69830

    成员函数总结

    默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。  ...在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适初始值。 虽然上述构造函数调用后,随想中已经有一个初始值,但是不能将其称为对对象中成员变量初始化。...我们如果不写析构函数,那系统自动默认生成析构函数,不会把开辟指针处理 默认生成析构函数,行为跟构造类似,内置类型成员不做处理,自定义类型成员会去调用他析构 三、拷贝构造函数 概念: 我们在创建对象时...总结: 内置类型成员完成值拷贝(Data) 自定义类型成员调用这个成员拷贝构造(MyQueue) Stack需要自己写拷贝构造,完成深拷贝 顺序表、链表、二叉树等自己创建空间类,都需要深拷贝 成员函数定义原则...能定义成const成员函数都应该定义成const,这样const对象(权限平移)和非const对象(权限缩小)都可以调用 要修改成员变量成员函数,不能定义const

    6010
    领券