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

如何使用指向常量对象的指针调用成员函数指针?

在C++中,如果您想要使用指向常量对象的指针调用成员函数指针,您需要确保成员函数指针与指针类型匹配。以下是一个示例:

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

class MyClass {
public:
    void print() const {
        std::cout << "Hello, world!"<< std::endl;
    }
};

int main() {
    const MyClass obj;
    void (MyClass::*funcPtr)() const = &MyClass::print;
    (obj.*funcPtr)();
    return 0;
}

在这个示例中,我们定义了一个名为MyClass的类,其中包含一个名为print的成员函数。我们创建了一个指向常量对象的指针obj,并定义了一个成员函数指针funcPtr,该指针指向MyClassprint函数。最后,我们使用(obj.*funcPtr)()语法调用print函数。

请注意,我们在定义funcPtr时使用了const关键字,以确保它与指向常量对象的指针兼容。如果您尝试使用非常量指针调用const成员函数,则会收到编译错误。

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

相关·内容

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

C++中this指针是一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用函数对象成员变量和成员函数。...一、定义和使用this指针 this指针是在成员函数内部定义一个常量指针。它存储了当前对象地址,可以通过它访问当前对象成员变量和成员函数。...,返回指向调用函数对象指针。...这里使用了*this来访问调用函数对象。 三、作为函数参数this指针 this指针也可以作为函数参数传递。这种情况下,可以在函数内部访问其他对象成员变量和成员函数。...在getName函数内部,使用了this指针访问调用函数对象成员变量name。

18240

指针指向常量_常量指针四种

const关键字 指针常量常量指针都离不开const关键字,我们先来了解一下什么是const关键字,const被用来定义常量,如果将一个变量加上const关键字,则被修饰变量值将无法改变。...下面是const修饰变量用法: const int a = 6; 或者 int const a = 6; 此时变量a值无法改变,只能访问,不能改写 指针常量 指针本身是一个常量,不能更改指针指向地址...p指向值为:200 a值为:200 b值为:200 常量指针 常量指针指的是一个常量,所以指针指向值是不能改变,但是指针指向地址是可以改变 #include using...,都可以使用 p = &b; // *p = 200; 错 // 这时不能改变指向地址值,只能更改指向地址 cout << "指针p指向值为:" << *p...:200 a值为:100 b值为:200 区别 注意指针常量常量指针区别,指针常量只能改变值,不能改变地址,常量指针只能改变地址,不能改变值。

64810

指针常量常量指针区别_指针常量指向常量

指针常量中,指针自身值是一个常量,不可改变,始终指向同一个地址。在定义同时必须初始化。...int *p, int const *p) 常量指针本质上是一个指针常量表示指针指向内容,说明该指针指向一个“常量”。...在常量指针中,指针指向内容是不可改变指针看起来好像指向了一个常量。...错误,指针常量不能在定义后赋值 const int * const ptr6 = &m; // 指向常量指针常量,具有常量指针指针常量特点,指针内容不能改变,也不能指向其他地方,定义同时要进行初始化...”并返回其首地址,此时str由指向字符串常量”apple”首地址变为指向字符串常量”orange”首地址,str指向地址发生了变化,但str是指针常量不能被修改,所以错误。

1.3K20

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

成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应对象。     ...),function判断如果是类成员函数指针,则会将通过该对象使用成员访问运算符,实现类成员函数指针调用功能(具体function如何判断是类成员函数指针还是普通函数指针,本人现在不清楚,如果有理解错误地方望指正...在可调用对象里有接收对象对象指针一组调用运算符重载函数,可使用对象对象指针调用成员函数使用方式与function相同: // main.cpp,头文件a.h与源文件a.cpp之前相同 #... // mem_fn通过成员函数指针自动推导可调用对象类型     fnt(a); // 使用对象调用成员函数     fnt(&a); // 使用对象指针调用成员函数     return 0; }... 使用对象调用成员函数     fnt(&a); // 使用对象指针调用成员函数     return 0; } 详细说明可查阅bind函数,fnt(a)与fnt(&a)结果一致。

1K40

指向类数据成员指针

在C++中,可以定义一个指针,使其指向成员成员函数,然后通过指针 来访问类成员。这包括指向属性成员指针指向成员函数指针。它类似与static成员函数成员变量,具有共享属性。...每一个实例化对象都可以借助指向类数据成员指针来访问指向数据。...// string *ps = &s1.name; // cout << *ps << endl; // 定义一个类中name成员指针(记录name成员偏移量) // 与实例化对象无关,但实例化对象可以使用指针访问数据成员...void (Student::*pf)() = &Student::display; // 实例化对象使用指针访问成员函数display (s1....●指向类静态成员函数指针 指向静态成员函数指针和普通指针相同,在定义时无须和类相关联,在使用时也 无须和具体对象相关联。

13610

指向函数指针

程序中可以定义一个指针变量,用来存放一个函数起始地址,即该指针变量指向一个函数,称为函数指针变量。...例如上面两个函数指针变量通常写成如下形式 int(* pl)(int, int ); double(* p2)( double); (2)使用函数指针变量调用函数之前,必须使函数指针变量指向一个函数...(3)通过函数指针变量调用函数一般形式如下: (*函数指针变量)(实参列表); 通过函数指针变量调用函数效果与使用函数调用函数执行流程是一样,实参与形参同样要求个数相同,类型符合赋值兼容规则...例如 int c=(*p1)(100,10); 上面语句调用指针p1指向函数,实参为100和10,返回值赋值给变量c。...(4)对函数指针变量进行加或减整数等操作是没有意义,可能会导致程序运行错误。 【例】编程实现两个整数四则运算,使用函数指针变量调用函数

77710

指向函数指针

调用一个函数时出了通过函数名来调用之外,还可以通过指向函数指针变量来调用。切记,和一切指针变量一样,一个指向函数指针其初值也不能为空。因为它在使用之前必须被赋予一个真实地址。...看下面这段代码,使用普通函数方式实现函数调用,实现矩阵法求解 2012081015163166.png 1 #include "stdio.h" 2 #include "math.h"...double result = 0.0; 22 result = func1(0.0,1.0); 23 printf("%g\n",result); 24 } 现在改写上面的代码,使用一个指向函数指针变量来调用函数...但对于指向函数指针变量,它只能指向函数入口处而无法指向函数中某条具体指令,因此,对于p+n,p++等指针运算对于指向函数指针没有意义。...如:double (*p)(double , double); 所以,通过以上了解,我们知道了指向函数指针灵活性,一个指针变量可以调用多个不同函数,这对于程序优化和简化都起了很大作用。

1.3K60

7.4 指向函数指针

一、什么是函数指针 解释:存储空间起始地址(又称入口地址)称为这个函数指针 二、用函数指针变量调用函数 (1)通过函数调用 (2)通过指针变量访问它所指向函数 三、定义和使用指向函数指针变量...一般形式 类型名(*指针变量名)(函数参数表列) 注意: ①定义指向函数指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定类型函数 ②如果要用指针调用函数,必须先使指针变量指向函数...③在给函数入口地址赋值时,只需给出函数名而不必给出参数 ④用函数指针变量调用函数时,只需将(*p)代替函数名即可,在(*p)之后括号中根据需要写上实参 ⑤对指向函数指针变量不能进行算术运算 ⑥用函数调用函数...,只能调用所指定一个函数,而通过指针变量调用函数比较灵活,可以根据不同情况先后调用不同函数 四、用指向函数指针函数参数 指向函数指针变量一个重要用途是把函数地址作为参数传递到其他函数

8203329

8.5 指向函数指针

02 用函数指针变量调用函数 如果想调用一个函数,除了可以通过函数调用以外,还可以通过指向函数指针变量来调用函数。...03 怎么定义和使用指向函数指针变量 1、一般形式 类型名(*指针变量名)(函数参数表列);如“int(*p)(int,int);”,这里“类型名”是指函数返回值类型。...2、定义指向函数指针变量,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定类型函数。 3、如果要用指针调用函数,必须先使指针变量指向函数。...7、用函数调用函数,只能调用所指定一个函数,而通过指针变量调用函数比较灵活,可以根据不同情况先后调用不同函数。...2、指向函数指针可以作为函数参数,把函数入口地址传递给形参,这样能够在被调用函数使用实参函数。 有时候,正是那些意想不到之人,成就了无人能成之事。

9133029

c++系列之二 指向成员函数指针(烧脑)

*fptr 绑定fptr到对象obj,而 ->*fptr 则绑定fptr到指针p所指向对象。(还有一个 重要区别 是:我们可以重载后者,却不能重载前者)。在 (obj....因为 “一个指向成员指针能在不同地址空间之间传递,只要二者使用对象布局一样” (此话来自C++老爸 Bjarne Stroustrup 《C++程序设计语言》 )。...对于一个虚函数调用,我们需要虚函数表来查找正确函数,然后, this 指针被传递给这个函数。 这就是非虚函数、虚函数、静态函数成员函数指针使用不用实现方式根本原因。...结论 简单总结一下,通过上述文章,我们学到了: 成员函数指针声明和定义语法 使用成员指针选择操作符来调用成员函数语法 使用 typedef 写出更加清晰代码 非虚成员函数、虚函数、静态成员函数之间区别...成员函数指针和常规指针对比 不同情形下成员函数指针转换规则 如何使用成员函数指针数组来解决特定设计问题 编译器是如何解释成员函数调用 扩展:成员变量指针 http://luodw.cc/2015

2.8K20

指针常量,常指针指向常量指针(从我大一写QQ空间迁移过来)

1.指针常量 从字面意思可以看出,指针是一个常量,也就是地址不能被修改。 int* const p 特点是指针指向数值可以改变,然而指针所保存地址却不可以改变。...2.指向常量指针 const int *p或者int const *p 特点是指针所保存地址可以改变,然而指针指向值却不可以改变。...3.指向常量指针 const int const*p 特点是指针所保存地址不可变,指针指向数值也不可变 4.空指针 顾名思义,就是保存地址为空指针 int...这样就会有内存丢失,也就是所谓内存泄漏。 因为第一行我们在堆中申请了一块int型区域,并且用指针p指向该空间。但是紧接着我们又在堆中申请了一块int型区域,用p指向了该空间。...所以此时指针p指向地址具有不确定性,故而称作迷途指针,避免方法是将指针初始化为空指针

23100

【C++】函数指针 ④ ( 函数指针函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型本质 | 函数指针做参数意义 )

一、函数指针函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., 调用函数可以动态指定 ; 2、函数指针做参数 定义了 如下 函数指针类型 pFun_add , 其类型为 int (*)(int, int) , 该指针指向一个 类型为 int (int, int..., int); 定义函数 接收 pFun_add 类型形参作为参数 , 该类型是 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数调用 函数指针 指向 函数 ; // 传入函数指针...; 作为回调函数 : 函数指针 可以作为 回调函数 ; 先将 函数指针变量 作为 实参 传递给 其它函数 , 在 接收函数指针 函数内部 , 满足某种条件时直接调用函数指针 指向 函数 , 这样实现了回调...C 语言 中模拟面向对象用法 ; 可以将特定 函数指针类型 定义为 结构体 一部分 , 并使用该 结构体 来传递具有特定行为对象地址 ; 该操作有助于更好地组织代码 , 使代码更易于理解和维护

23350

【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用 typedef 定义函数指针类型 )

直接调用 // 直接调用 add 函数 , 运行该函数 // 函数名 add 就是函数地址 add(1, 2); 2、定义函数指针变量 如果不使用 add 函数调用函数 , 使用 函数类型指针..., int) 函数类型 指针 , 将 add 函数名 ( 函数地址 ) 直接 赋值给 函数指针 , 可以直接通过函数指针调用函数 ; 下面的代码中 , 定义了函数指针 p , 指向 int(int,.../ int(int, int) 类型 是 函数类型 // 该指针 指向 函数地址 int(*p)(int, int) = add; // 通过函数指针调用 函数 p(3, 4); 3、使用 typedef...func_add // 使用时需要使用该类型指针调用函数 typedef int fun_add(int, int); 使用定义 函数类型 调用函数 : 定义函数类型 指针类型 func_add...; 定义函数类型示例 : 将指向 int add(int x, int y) 函数 函数指针类型 int (*)(int, int) , 定义为 pFun_add名称 , 使用时需要使用该类型变量调用函数

35960

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

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

17920
领券