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

在对象上调用非常数成员函数指针

是指通过对象的指针或引用调用非常数成员函数的指针。非常数成员函数是指在函数声明中没有使用const关键字修饰的成员函数。

对象是面向对象编程中的一个实体,它具有属性和行为。非常数成员函数是对象的一种行为,它可以修改对象的状态或执行其他操作。

调用非常数成员函数指针可以通过以下步骤实现:

  1. 定义一个对象,并获取指向该对象的指针或引用。
  2. 定义一个非常数成员函数指针,指向对象的非常数成员函数。非常数成员函数指针的类型与非常数成员函数的类型相匹配。
  3. 使用指针或引用调用非常数成员函数指针,通过指针或引用访问对象的非常数成员函数。

以下是一个示例代码:

代码语言:cpp
复制
#include <iostream>

class MyClass {
public:
    void nonConstMemberFunction() {
        std::cout << "This is a non-const member function." << std::endl;
    }
};

int main() {
    MyClass obj;
    MyClass* ptr = &obj;

    void (MyClass::*funcPtr)() = &MyClass::nonConstMemberFunction;

    (obj.*funcPtr)();  // 通过对象调用非常数成员函数指针
    (ptr->*funcPtr)(); // 通过指针调用非常数成员函数指针

    return 0;
}

在上述示例中,我们定义了一个名为MyClass的类,其中包含一个非常数成员函数nonConstMemberFunction。在main函数中,我们创建了一个MyClass对象obj,并获取了指向该对象的指针ptr。然后,我们定义了一个非常数成员函数指针funcPtr,指向MyClass的nonConstMemberFunction函数。最后,我们使用对象和指针调用非常数成员函数指针,输出了相应的结果。

非常数成员函数指针的应用场景包括但不限于:

  1. 回调函数:非常数成员函数指针可以作为回调函数,在特定事件发生时被调用。
  2. 状态机:非常数成员函数指针可以用于实现状态机,根据不同的状态调用不同的成员函数。
  3. 插件系统:非常数成员函数指针可以用于实现插件系统,动态加载和调用不同的插件函数。

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

腾讯云函数(云函数):https://cloud.tencent.com/product/scf

腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm

腾讯云容器服务(TKE):https://cloud.tencent.com/product/tke

腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb

腾讯云对象存储(COS):https://cloud.tencent.com/product/cos

腾讯云人工智能(AI):https://cloud.tencent.com/product/ai

腾讯云物联网(IoT):https://cloud.tencent.com/product/iot

腾讯云移动开发(移动推送):https://cloud.tencent.com/product/umeng

腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs

腾讯云元宇宙(Tencent XR):https://cloud.tencent.com/product/xr

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

相关·内容

让类成员函数指针成为可调用对象

成员函数指针实践是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象。     ...>的std::function模板类: 因为类的成员函数执行时,会在参数列表添加参数--隐式的this实参,function模板类调用时可以传入对象实现this的功能(传入的对象不一定是指针类型...;     fnt(a);     return 0; } 通过fnt(a)传入对象a,function里通过a与成员访问符调用成员函数。...调用对象里有接收对象对象指针的一组调用运算符重载函数,可使用对象对象指针调用成员函数,使用方式与function相同: // main.cpp,头文件a.h与源文件a.cpp之前相同 #... // mem_fn通过成员函数指针自动推导可调用对象类型     fnt(a); // 使用对象调用成员函数     fnt(&a); // 使用对象指针调用成员函数     return 0; }

1.1K40

C++ this指针:用于成员函数中指向调用函数对象

C++中this指针是一个指向当前对象指针成员函数中,可以使用this指针来访问调用函数对象成员变量和成员函数。...一、定义和使用this指针 this指针成员函数内部定义的一个常量指针。它存储了当前对象的地址,可以通过它访问当前对象成员变量和成员函数。...这里使用了*this来访问调用函数对象。 三、作为函数参数的this指针 this指针也可以作为函数参数传递。这种情况下,可以函数内部访问其他对象成员变量和成员函数。...getName函数内部,使用了this指针访问调用函数对象成员变量name。...四、总结 this指针C++中是一个非常重要的概念,可以用来访问调用函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针的使用可以帮助我们更好地编写面向对象的程序。

19940

实战C++对象模型之成员函数调用

通过本文的演示,可以看见这背后的一切,完全可C函数方式调用C++类普通成员函数和C++类虚拟成员函数。 为了实现C函数方式调用C++类成员函数,准备两个文件:。...; }; void X::xxx() // bbb.cpp完全以C函数方式调用类X的成员函数xxx { printf("m=%d, n=%d\n", m, n); } 把aaa.cpp编译成共享库:...XXX,使用前让它指向类X的成员函数xxx typedef void (*XXX)(struct X*); // 参数实为aaa.cpp中类X的this指针 // 需要指定一个命令行参数argv[1],...struct X x2; x2.m = 2019; x2.n = 2018; (*xxx)(&x2); // 这里完全以C函数方式调用类X的类成员函数xxx // 第3组测试数据 x2.m = 29;...bbb.cpp中的struct X定义得改一下,因为有虚拟函数的类的头一个指针大小为指向虚拟函数表的指针

1K10

C++中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类中,...test* this,即这时会出现类型不匹配的错误,visual studio 中会出现类似于下面的错误: 4 所以通过上面的说明,我们知道了为什么const 对象不能调用非const成员函数。...* this; 是和void print() const;中this指针的类型是一样的,所以常量对象可以调用const成员函数

1.2K20

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

, 这个增加的参数是 对象本身的指针 ; Student 类中 , 定义了如下函数 : // 成员函数 转为 全局函数 , 多了一个参数 Student* pThis 作为第一个参数 void...列表的开始位置 ; 详细代码 , 参考最后的完整代码示例 ; 2、全局函数转为成员函数 - 通过 this 指针隐藏操作数 全局函数转为成员函数 , 需要隐藏一个参数 , 就是通过 this 指针隐藏左操作数..., 对象本身 就是 左操作数 , 成员函数中 , 通过 this 指针访问对象本身的成员 ; 全局函数中 , 实现两个 Student 类相加 , 接收两个 Student 引用类型的参数 , 引用相当于一级指针..., 将 两个 Student 对象相加 , 返回的是一个匿名对象 , 该匿名对象 成员函数 中新创建的对象 ; // 成员函数中, 将两个 Student 对象相加 // 全局函数 转为 成员函数...= StudentPlus(s, s2); s3.print(); // 调用成员函数, 将两个 Student 对象相加 Student s4; // 函数返回的 匿名对象 用于 s4 赋值

18620

C++核心准则T.69:模板内部,不要进行不受限制的非成员函数调用

make an unqualified non-member function call unless you intend it to be a customization point T.69:模板内部...,不要进行不受限制的非成员函数调用,除非你希望它成为一个定制点 Reason(原因) Provide only intended flexibility....如果你想用依赖模板类型参数的值t调用你自己的帮助函数helper(t),将它放入::detail命名空间并用detail::helper(t)对调用进行限定;如果一个帮助函数处于t的类型可以被触发的命名空间...,不受限的调用会成为一个定制点;这会引起意外调用非约束函数模板等问题。...模板同一个命名空间中,如果存在一个同名非成员函数,标记模板中针对传递受影响类型变量的非成员函数的不受限调用

1.1K10

C++中this指针的使用方法.

this指针仅仅能在一个类的成员函数调用,它表示当前对象的地址。...全局函数,静态函数都不能使用this。 实际成员函数默认第一个參为T* const register this。...由此可见,this成员函数的開始前构造的,成员的结束后清除。 这个生命周期同任一个函数的參是一样的,没有不论什么差别。 当调用一个类的成员函数时,编译器将类的指针作为函数的this參传递进去。...因此,你获得一个对象后,也不能通过对象使用this指针。所以,我们也无法知道一个对象的this指针的位置(仅仅有成员函数里才有this指针的位置)。...知道原理后,这两个问题就非常easy理解了。 事实,模拟实现this的调用非常多场合下,非常多人都做过。 比如,系统回调函数。系统回调函数非常多,如定时,线程啊什么的。

1.2K20

关于C++ const 的全面总结

(1)const修饰变量,下面两种定义形式本质是一样的。...3、函数中使用CONST (1)const修饰函数 a.传递过来的參函数内不能够改变(无意义,由于Var本身就是形參) void function(const int Var); b.參指针所指内容为常量不可变...//也不能调用类中不论什么非const成员函数。 } 对于const类对象/指针/引用,仅仅能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。...· const修饰的对象,该对象的不论什么非const成员函数都不能被调用,由于不论什么非const成员函数会有改动成员变量的企图。...const应该使用引用或指针,而不是一般的对象实例,原因同上; · const成员函数中的三种使用方法(參、返回值、函数)要非常好的使用; · 不要轻易的将函数的返回值类型定为const; · 除了重载操作符外一般不要将返回值类型定为对某个对象

72430

C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)

只能在“成员函数”的内部使用 3. this指针本质是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...大多数现代编译器和硬件,这样的调用可能不会立即导致崩溃,因为 this 指针通常只函数内部需要访问成员变量时才会被使用。 但是,这并不意味着通过空指针调用成员函数是安全的或推荐的做法。...即使 PrintA 函数不直接访问 _a 成员(实际它是通过 this 指针隐式访问的),但调用成员函数本身就需要一个有效的对象实例。...它实际是一个指向调用成员函数对象(或类的实例)的指针。这个指针并不是真正存储在对象本身的内存布局中,而是成员函数调用时,由编译器函数调用栈帧(stack frame)中创建并管理的。...this 指针本身在成员函数调用时总是指向一个有效的对象(除非是通过某种非常规的方式调用成员函数,比如直接通过函数指针调用且没有正确的对象上下文)。

9710

C++打怪升级(四)- 类和对象入门1

C++中引入了this指针解决了这个问题:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数this,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有对成员变量 的操作...this指针本质成员函数的形参,当对象调用成员函数时,将类对象的地址作为实参传递给this形参,所以对象中不存储this指针 。...类对象如果保存成员函数,实际保存的是成员函数的地址。...C++中引入了this指针解决了这个问题:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数this,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有对成员 变量的操作...this指针本质成员函数的形参,当对象调用成员函数时,将类对象的地址作为实参传递给this形参,所以对象中不存储this指针

43210

【C++】类与对象

类与对象 C++中,类和对象的出现,是为了完善C语言的不足,struct的基础慢慢进步,慢慢完善,将其的功能发挥到最大,也方便使用!...类与对象可谓是非常的重要了,所以在这里我们分为几篇来学习类与对象接下来的学习中,我们需要反复琢磨,去好好复习,才能学的好,学的牢,学的扎实!...调用函数时,是通过其地址去找到函数的,那么是函数指针吗?? 2.类对象的存储方式猜测 那成员函数到底怎么存储的呢??...C++ 中通过引入 this 指针解决该问题,即: C++ 编译器给每个 “ 非静态的成员函数 “ 增加了一个隐藏 的指针参数,让该指针指向当前对象 ( 函数运行时调用函数对象 ) ,函数体中所有...this 指针本质是 “ 成员函数 ” 的形参 ,当对象调用成员函数时,将对象地址作为实参传递给 this 形参。所以 对象中不存储 this 指针

36510

【C++】C++入门 — 类和对象初步介绍

C++中通过引入this指针解决该问题 即:C++ 编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有“成员变量”的操作,都是通过该指针去访问...只能在“成员函数”的内部使用 this指针本质是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。...this指针存在于哪里? C++中,this指针是一个隐含的、非静态成员函数内部可用的特殊指针,它指向当前正在调用成员函数对象实例。...因此,this指针实际是存在于每个非静态成员函数的执行上下文中,并且它始终指向当前调用函数对象实例。 this指针可以为空吗?...常规情况下,当一个有效的对象调用成员函数时,this指针不应该为空。

10010

【笔记】《C++Primer》—— 第四部分:高级主题(完)

当我们调用new时,实际我们先调用了一个称为operator new的标准库函数分配了一块足够大的未命名的内存,然后将目标元素构造在这块内存中,完成后返回这块内存的头指针。...delete也是类似的过程,不过和new相反,实际上会先调用析构函数指针区域内的对象析构,然后调用一个称为operator delete的标准库函数释放内存空间。...allocator的construct类似,可以指定的内存地址分配想要的对象 运行时类型识别(RTTI)应在我们想使用基类对象指针或引用来执行某个派生类的非虚函数时使用,包括typeid可以返回表达式的类型...*或->*来具体对象上访问成员。...直观的理解就是当我们用解引用符*对成员指针解引用时,我们得到的是对应类的成员类型,我们还需要对应某个具体的对象用点或箭头获取对象中的这个成员类型的真正的值 我们调用成员函数的方法和使用成员类差不多,区别是标志着函数名的括号仍然不可少

87210

C++初阶-类和对象

原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问 九、this指针 1、this指针引入 引入背景: 对于对象调用成员函数函数需要区分不同对象找到对象自身进行操作...,由此引入this指针 具体操作: C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有成员变量的操作,都是通过该指针去访问...this指针的类型:类类型* const 只能在“成员函数”的内部使用 this指针本质其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参...可以为空,当我们调用函数的时候,如果函数内部并不需要使用到this,也就是不需要通过this指向当前对象并对其进行操作时才可以为空(当我们在其中什么都不放或者在里面随便打印一个符串),如果调用函数需要指向当前对象...会在调用Print成员函数时崩溃,因为此时的this是空指针,当使用成员函数操作对象成员变量时,需要对指针进行解引用操作,而对空指针解引用操作会崩溃 觉得不错的话,欢迎多多点赞三连支持博主!!

46850

【C++】类与对象理解和学习(

对象的存储方式 实际成员函数虽然是定义类中,但是它并不存储类里,假如它是存储类中,而每个实例化后的对象都各自拥有各自的成员函数,则会造成严重的资源浪费,因为成员函数就好比小区中的健身器材、公共厕所等公共共有的设施...成员函数实际是存在于公共代码段中。 所以实例化后的对象的大小,只需要计算成员变量大小即可,当然,类对象大小的计算与struct一样遵循结构体内存对齐规则。...this指针 在上面我们知道,成员函数是属于公有的,是类实例化后的各个对象所共同使用,那么不禁有一个问题,就是既然是公有的,那么它是怎么区分是谁调用的呢?...,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有“成员变量”的操作,都是通过该指针去访问。...,this是不可被修改的,this实际就是实例化对象的地址 this只能在成员函数内部使用 this指针本质是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参

45440

C++重要知识点小结---1

第三个意味着a是一个指向常整型指针(也就是,整型是不可修改的,但指针可以)。第四个意思a是一个指向整型的常指针(也就是说,指针指向的整型是可以修改的,但指针是不可修改的)。...关键字const的作用是为给读你代码的人传达非常有用的信息,实际,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。...由于C++提供的默认拷贝构造函数只是对对象进行浅拷贝复制。如果对象的数据成员包括指向堆空间的指针,就不能使用这种拷贝方式,此时必须自定义拷贝构造函数,为创建的对象分配堆空间。...编译时就能确定哪个重载函数调用的,称为先期联编。 多态性可可以简单的概括为“一个借口,多种方法”,程序运行的过程中才决定调用函数。 虚函数就是允许被其子类重新定义的成员函数。...设置虚函数,需注意下列事项: 只有类的成员函数才能说明为虚函数。这是因为虚函数仅适用于有继承关系的类对象,所以普通函数不能说明为虚函数。 静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象

75791

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

* pThis, int age, int height) // 左右指 , const * 左边修饰的是内存中的数据, const * 右边修饰的是指针本身 void fun(int...与 非静态普通成员变量 都不能修改 ; 不能调用非常成员函数 : 只能调用 " 常量成员函数 " , 不能调用 非常成员函数 , 以保证不会修改 成员变量 ; " 常量成员函数 " 只能访问 常量成员变量...; // 身高 如果 成员函数 被 const 关键字 声明为 常量成员函数 , 则在该函数中 不能修改 类对象中的 任何成员变量 ; class Student { public: void fun...// 左右指 , const * 左边修饰的是内存中的数据, const * 右边修饰的是指针本身 void fun(int age, int height) const {...(const Student* const pThis, int age, int height) // 左右指 , const * 左边修饰的是内存中的数据, const * 右边修饰的是指针本身

18820

C++初阶类与对象(一):学习类与对象、访问限定符、封装、this指针

所以需要实例化后,再进行赋值等一系列操作 7.类对象模型 7.1类对象的存储方式 只保存成员变量,成员函数存放在公共的代码段(成员函数的地址不在对象中,成员变量是的) 结论:一个类的大小,实际就是该类中...,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象 C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数...“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用函数对象),函数体中所有“成员变量”的操作,都是通过该指针去访问。...只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成 所以实际: 8.2 this指针的特性 this指针的类型:==类的类型 const==,即成员函数中,不能给this指针赋值。...* 只能在“成员函数”的内部使用 this指针本质是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参。所以对象中不存储this指针

12010
领券