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

_类成员函数可以访问本类对象私有成员

成员函数可以访问本类对象私有成员 sList是一个类 私有成员是head,有一个成员函数形参是本类对象(引用,引不引用不影响结论和原因) ==为什么呢!...对象b是sList类,而这个intersection函数是sList成员函数 head虽然是sList类对象私有成员,但是是在sList类访问 ==就是 在类访问了本类(实例化对象)私有成员...因为这是在类访问,又不是在类外== 这说明了,类成员访问权限,是对于==类==而言,决定在==类==外是否可被访问 而非对于对象来说(因为对象不同但是都是属于同一种类,类实例化对象成员,...本来就是类成员,只是抽象和实例化问题 这非常合理地体现了 类 封装性 这个就是不行,在类外访问了 这一点是非常好用,可以利用这一点 ==用成员函数肆无忌惮地访问对象私有成员!...==只要声明函数是类成员函数,将外部同类对象设为形参(或加个引用)就可以了!! 不必再为如何访问到同类外部对象私有成员而苦思了!

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

每日一问:c++类成员函数,能作为线程参数吗?

问:类成员函数可以传入线程参数吗? 回答: 如果c语言全局函数,可以。 如果是类静态成员函数,可以 如果是类普通成员函数,不可以 为什么?...《深入探索C++对象模型》中提到成员函数时,当成员函数不是静态,虚函数,那么我们有以下结论: (1) &类名::函数名 获取成员函数实际地址; (2) 对于函数x来讲obj.x()编译器转化后表现为...x(&obj),&obj作为this指针传入; (3) 无法通过强制类型转换在类成员函数指针与其外形几乎一样普通函数指针之间进行有效转换。...所以,要在回调函数中传入一个类普通成员函数时,this指针无处安放使得回调函数比较复杂。 怎么解决?...,该函数参数为void*,返回值为void* FUNC callback = (FUNC)&MyClass::func;//强制转换func()类型 int ret

2.2K30

VC和GCC成员函数指针实现研究(一)

最近在《C++对象模型》一书里说到virtual成员函数指针,低于128被cfront编译器认为是虚表偏移量(支持子类对父类函数覆盖)。...图片 图三: VC虚成员函数vcall实现 这里把cx取出并取值后加了8地址偏移,说明VC单继承情况下虚表指针放在了数据结构最前面。+8显然是第二个虚函数地址偏移(第一个是析构)。...图片 图五:GCC单继承下成员函数指针赋值操作 很明显就和VC不一样啦,GCC在给成员函数指针赋值时候,给了两个值,第二个暂时没用到后面讨论。...往下看函数调用: 图片 图六:GCC单继承下成员函数指针调用 可以看到,GCC成员函数指针和VC设计明显不同。...下一篇 VC和GCC成员函数指针实现研究(二)

49420

VC和GCC成员函数指针实现研究(一)

最近在《C++对象模型》一书里说到virtual成员函数指针,低于128被cfront编译器认为是虚表偏移量(支持子类对父类函数覆盖)。...image.png 图三: VC虚成员函数vcall实现 这里把cx取出并取值后加了8地址偏移,说明VC单继承情况下虚表指针放在了数据结构最前面。...由此来保证调用是子类里成员函数。 好吧运行结果还是有必要贴一下 image.png 图四: VC单继承测试代码执行结果 GCC单继承成员函数指针实现 接下来就是GCC了。...往下看函数调用: image.png 图六:GCC单继承下成员函数指针调用 可以看到,GCC成员函数指针和VC设计明显不同。...下一篇 VC和GCC成员函数指针实现研究(二)

83030

Deque部分成员函数 解析,关于这个类,百度有很多解析,唯独没有函数介绍

函数 描述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中数据赋值给c。 将n个elem拷贝赋值给c。...创建一个以[beg;end)区间deque。 销毁所有数据,释放内存。 c.empty() 判断容器是否为空。 c.end() 指向迭代器中最后一个数据地址。...c.erase(pos) c.erase(beg,end) 删除pos位置数据,传回下一个数据位置。 删除[beg,end)区间数据,传回下一个数据位置。...get_allocator 使用构造函数返回一个拷贝。...c.rbegin() 传回一个逆向队列第一个数据。 c.rend() 传回一个逆向队列最后一个数据下一个位置。 c.resize(num) 重新指定队列长度。

70680

【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数参数传递与键值对参数 | 完整代码示例 )

文章目录 一、Groovy 构造函数中为成员赋值 二、Groovy 函数参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数中为成员赋值 ---- Groovy 类没有定义构造函数 ,...但是可以使用如下形式构造函数 , 为 Groovy 类设置初始值 ; new 类名(成员名1: 成员值1, 成员名2: 成员值2) 顺序随意 : 成员顺序随意 , 没有强制要求 , 只需要 成员名...---- 在 Groovy 构造函数中 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型参数 , 这是键值对 map 类型集合 ; 但是对于普通函数 , 不能使用上述格式 ,...println "${a}, ${b}" } } 如果使用 student.printValue(a: “Tom”, b: 18) , 就会报错 , 提示只传入了一个 map 集合作为参数...; 必须使用如下形式 , 才能正确执行 printValue 函数 ; // 传入 a: "Tom", b: 18 是第一个参数 , 这是一个 map 集合 // 第二个参数是 "Jerry" 字符串

9K20

【Kotlin】类初始化 ② ( 主构造函数 | 主构造函数定义临时变量 | 主构造函数中定义成员属性 | 次构造函数 | 构造函数默认参数 )

文章目录 一、主构造函数定义临时变量 二、主构造函数中定义成员属性 三、次构造函数 四、构造函数默认参数 一、主构造函数定义临时变量 ---- 在 Kotlin 类中 , 可以在 类声明 时 在 类名后...定义 " 主构造函数 " ; 在 主构造函数 中 , 可以 定义 成员属性 , 并为 成员属性 提供 初始值 ; 在 主构造函数 中 , 可以定义 临时变量 , 临时变量 一般使用 以下划线为开头 名称..., 每个次构造函数都可以有不同参数组合 ; 定义次构造函数后 , 必须调用主构造函数 , 并且为每个主构造函数 参数设置 参数值 ; 次构造函数中可以实现代码逻辑 , 作为主构造函数补充 ; 代码示例...---- 在定义 构造函数 时 , 可以为 构造函数 参数 指定 默认值 , 如果 用户传入了 值参 则 使用用户传入值 , 如果用户没有传入值 则 使用该 默认值 ; 如果 构造函数 参数有 指定默认值..., 可以不为传递 值参 , 构造函数中跳过该参数 , 后面的参数需要使用 参数名 = 参数值 进行赋值 ; 代码示例 : class Hello( // 主构造函数, 直接在主构造函数中定义属性

4.8K20

std和boostfunction与bind实现剖析

首先是bind函数Bind函数 在使用过程中实际上是有几个疑问点: 如何统一处理函数成员函数和仿函数类型绑定? 如何处理绑定式函数参数和调用时参数?...图1: bind_t 内存结构 bind_t里包含了两个成员,一个用于存可调用仿函数functor,另一个用于保存执行bind函数时传入参数列表list。...参数列表list部分则是直接保存了bind函数传入参数。如果functor是一个成员函数的话,list至少要有一个,并且这个参数用于保存调用对象。...所以关键就在于operator[]取数据方式。 图8: Boost 1.55.0 bind模块list去参数实现示例 从图中可以看出来,取参数实现也相当简单。...首先是成员函数重载实现对占位符取相应数据。这里面 **boost::arg到boost::arg**分别是占位符。如果是占位符,就会返回参数列表(也就是新list)对应位置数据。

98130

std和boostfunction与bind实现剖析

首先是bind函数Bind函数 在使用过程中实际上是有几个疑问点: 如何统一处理函数成员函数和仿函数类型绑定? 如何处理绑定式函数参数和调用时参数?...参数列表list部分则是直接保存了bind函数传入参数。如果functor是一个成员函数的话,list至少要有一个,并且这个参数用于保存调用对象。...[](p938_08.png) 图8: Boost 1.55.0 bind模块list去参数实现示例 从图中可以看出来,取参数实现也相当简单。首先是成员函数重载实现对占位符取相应数据。...这里面 boost::arg到boost::arg分别是占位符。如果是占位符,就会返回参数列表(也就是新list)对应位置数据。否则直接把传入数据引用返回去了。...复制function时,为什么会导致关联对象也复制? 调用时如何区分成员函数、非成员函数、虚函数和仿函数

1.8K10

【C++】构造函数初始化列表 ① ( 类对象作为成员变量时构造函数问题 | 构造函数初始化列表语法规则 )

一、类对象作为成员变量时构造函数问题 1、问题描述 如果 一个类 A 对象 作为 另外一个类 B 成员变量时 , 在以下场景会报错 : 为类 A 定义 有参 构造函数 , 那么 A 无参默认构造函数就失效了...; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个类中 , 成员变量是 带有参构造函数 类型 , 这种情况下没有调用 有参构造函数机会 , 此时就会出现 编译报错情况 ; 在下面的代码中... 无参构造函数创建 A 对象 , 但是 A 无参构造函数无法使用 , 必须使用 A 有参构造函数 , 这里就出现问题 , 报错 “B::B(void)”: 由于 数据成员“B::m_a”不具备相应...是一种用于初始化类成员变量方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...(成员变量值) , 成员变量名称(成员变量值) { // 构造函数内容 } 构造函数初始化列表 位置在 构造函数 参数列表之后 , 冒号 : 与花括号 {} 之间 ; 使用 逗号 , 分隔 ;

48230

4.6 C++ Boost 函数绑定回调库

bind函数可以将一个函数函数对象和参数进行绑定,返回一个新函数对象。通过这个新函数对象,我们就可以将原有的函数函数对象当做参数传来传去,并可以传递附加参数,方便实现参数绑定和回调函数。...使用boost::bind()函数可以方便地生成函数对象,在函数对象中保存一些函数参数bind()函数一大优势是可以匹配任何可调用对象,包括函数成员函数函数指针、成员函数指针等。...默认bind通常是以适配器bind1st/bind2nd存在,而boostbind函数远远比默认绑定函数强大,最多可以绑定9个函数参数,且对绑定对象要求也很低,可在没有result_type...function使用起来非常灵活,可以将函数指针、函数对象、成员函数指针等各种可调用对象作为输入参数,并且可以绑定一部分函数参数,生成新函数对象。...,默认情况组号是int类型,组号可以指定组成员调用顺序,如下代码我们新建slots模板类,让可以动态生成一些列插槽,演示组号与调用顺序之间关系。

20230

4.6 C++ Boost 函数绑定回调库

bind函数可以将一个函数函数对象和参数进行绑定,返回一个新函数对象。通过这个新函数对象,我们就可以将原有的函数函数对象当做参数传来传去,并可以传递附加参数,方便实现参数绑定和回调函数。...使用boost::bind()函数可以方便地生成函数对象,在函数对象中保存一些函数参数bind()函数一大优势是可以匹配任何可调用对象,包括函数成员函数函数指针、成员函数指针等。...默认bind通常是以适配器bind1st/bind2nd存在,而boostbind函数远远比默认绑定函数强大,最多可以绑定9个函数参数,且对绑定对象要求也很低,可在没有result_type...function使用起来非常灵活,可以将函数指针、函数对象、成员函数指针等各种可调用对象作为输入参数,并且可以绑定一部分函数参数,生成新函数对象。...,默认情况组号是int类型,组号可以指定组成员调用顺序,如下代码我们新建slots模板类,让可以动态生成一些列插槽,演示组号与调用顺序之间关系。

23720

面向对象编程风格 VS 基于对象编程风格(boost::bindfunction)

void *(*start_routine) (void *), void *arg); start_routine 参数是一般函数指针,故不能直接将run() 作为参数,因为run()是成员函数,...隐含this指针,故实现一个静态成员函数ThreadRoutine(), 在里面调用run(),此外参数arg 我们传递this指针,在ThreadRoutine()将派生类指针转换为基类指针来调用run...二、基于对象编程风格 boost bind/function库出现,替代了stl中mem_fun,ptr_fun  ,bind1st,bin2nd等函数,这些函数参考这里。...fp(100); 等价于 (&foo)->memberFunc(0.5, 100, 10); 即_1 是占位符,如果绑定是一般函数,则bind参数中不再需要this指针,当然一般函数也没有类名前缀...基于对象风格:用一个EchoServer包含一个TcpServer(具体类)对象成员server,在构造函数中用boost::bind 来注册三个成员函数,如server.SetConnectionCallback

1.4K00

【C++】C++ 类中 this 指针用法 ③ ( 全局函数成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

一、全局函数成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 类 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数参数列表开始为止..., 这个增加参数是 对象本身指针 ; 在 Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...; } 详细代码 , 参考最后完整代码示例 ; 二、有参构造函数设置默认参数值 ---- 为 Student 类定义了有参构造函数 , 则默认无参构造函数 , 就不会生成 ; // 带参构造函数...; 如下带参数构造函数 , 并且为 有参构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象名 方式定义对象变量 ; class Student { public: // 带参构造函数...是指针指向 自身对象 return *this; } // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void print() {

17720

C++ 新特性学习(四) — Bind和Function

成员变量 这是老标准中std::bind1st和std::bind2nd增强版,这两个函数只能且必须绑定一个带有两个参数,并且只能且必须传入一个自定义参数。...所以为了性能上考虑,建议传入类型为引用或指针,避免结构复制 另外,除了普通函数外,std::bind也支持成员函数,但是和普通函数不同,成员函数绑定第二个参数必须是函数实例。...另外,std::bind还可以用于绑定成员变量,和函数结构,绑定函数变量方法类似成员函数,绑定函数结构方法类似普通函数 再来一个std::bind稍微复杂一点应用例子,和算法库配合使用 void...( get, _1 ); return 0; } bind函数返回结果不包含STL中一元或二元函数概念,因为缺少result_type 和 argument_type 或 first_argument_type...std::function同样支持函数成员函数函数变量和函数结构。 std::function和std::bind配合使用时是把std::bind返回结果作为函数对象使用

2.3K10

boost::bindboost::function使用示例

boost利器之bind和function使用示例.pdf C++11已支持bind和function,之前不支持,但可以借助boost达到同样目的。...但是调用函数名不同,而且函数参数列表不同。...1) boost::function 它模板参数函数原型,格式为:函数返回类型 (参数列表),其中类型还可以为模板。...2) boost:bind 它可以带多个参数,第一个参数总是为函数地址,如果为非类成员函数,则后面跟参数列表,如果是类成员函数,则第二个参数为类对象地址。...其中“_1”和“_2”等,表示参数占位符,对应于boost::function中函数原型参数列表。像“fs”和“R_OK | W_OK | X_OK”,一看就知道是咋回事。

1.2K20

基于boostbind与function一个简单示例消息处理框架

前两年开始接触boostboost库真是博大精深;今天简单介绍一下boost中之前用到bind与function,感觉挺实用,分享给大家,我对boost也不多,让大家见笑了。...上次文发了一个基于类成员函数指针实现一个消息处理框架,这次用boostfunction实现,比那个要简单灵活很多; 今天介绍这个示例代码,算是一个消息处理框架吧,用于说函数对象function与bind...基本用法; 首先介绍一下function与函数指针区别: 函数指针:只能指向静态函数,如果要指向类成员函数就有一定难度(也可以实现,上文中使用成员函数指针) function:函数对象,这个比较灵活...,即可以当做函数指针用,也可以存储类成员函数,类似于成员函数指针; 关于bind,这里使用主要是用于将成员函数转换为函数对象; 处理框架类: //process_data.h #include <iostream...; //这个是注册一个函数对象,test命令 CDataProcess::getInstance()->registProcHandle("test",boost::bind(&testDataProc

32120
领券