成员函数指针调用(C++如何在一个类的成员函数中调用另一个类的成员函数)

本文目录
- C++如何在一个类的成员函数中调用另一个类的成员函数
- 对象或指针怎么调用成员函数
- 成员函数指针的解引用怎么理解
- 派生类指针指向基类对象,如何调用其成员函数
- 新人请问,怎么获取类成员函数的指针
- C++|详解类成员指针:数据成员指针和成员函数指针及应用场合
- 怎样在一个类的成员函数里调用这个类里public的函数指针成员
C++如何在一个类的成员函数中调用另一个类的成员函数
1、首先声明如下所示的类,类内部定义一个public的整型数据成员。
2、主函数中定义指向类的数据成员的指针。
3、声明类的对象,该对象变量调用指向类的数据成员的指针进行赋值操作。
4、然后输出打印类的数据成员,从结果看,上一步的操作赋值成功。
5、定义类的指针,通过指针指向对象成员的指针来进行赋值。
6、从结果看,上一步的操作成功输出打印类的数据成员。
7、接下来将数字赋值给对象变量指向类的数据成员的指针,通过指针指向对象成员的指针来进行打印输出。
8、从输出的结果看,指向类的数据成员的指针可以通过本地对象和对象指针来进行操作。
对象或指针怎么调用成员函数
首先,类对象和对象指针其实就是对应的一段内存的首地址。
调用的成员函数的时候,比如成员函数为:void student::fun(int a);,这个fun有一个参数,但实际fun还有一个隐式参数,这个参数其实传递到函数进去的就是该类的对象或指针,它是该类保存数据的内存首址,当fun中改变成员变量的值时,就是改变这个传递过来的地址指针所指向的那块内存的数据,由此不同的对象所指向的内存不同,所以对象与对象之间互不打扰。
成员函数指针的解引用怎么理解
p是指向Base类(及其子类)的对象的指针。pf是指向类Base的成员函数的指针,就是说pf是指向函数的指针,但只能用它指向Base的成员函数,当然这个成员函数还得满足pf定义的签名,即不需要参数且返回类型是void。
那么p-》的意思就是引用p指向的对象的某个成员(可以是数据成员,也可以是函数成员)。比如p-》print();,可以理解为调用p指向的对象的方法print。但这里需要注意的一点是:print是虚函数且p可以指向子类,因此,实际调用的可能是print方法的子类版本。
因pf是指向Base类的成员函数的指针,所以,*pf就是pf指向的成员函数。
而(p-》*pf)();就是调用p指向的对象的由pf指向的成员函数。简单讲就是,调用p指向的对象的一个成员函数,但这个成员函数究竟是哪个,由指针pf给出。
派生类指针指向基类对象,如何调用其成员函数
pb-》f(); //因为pb指向的实际对象是A类,所以编译器会把A当作B的子类看待,由于函数同名,于是 pb-》f()会查找A的虚函数表,而A没有虚函数表,于是出错 ,你可以把A的f()也定义成virtual 的,那就会调用A的f() ,或者把B的f()换个名字比如 f1(),那么pb-》f();就不会查找虚函数表,而执行了A::f()
新人请问,怎么获取类成员函数的指针
class Program{
public:
void to_swap(int*,int*);
};
void Program::to_swap(int *p, int*p2){
int temp = *p;
*p = *p2;
*p2 = temp;
}
int main(int argc, char* argv){
Program app;
void (Program::*pf)(int *, int*);// 第1步,声明指向公共成员函数的指针的声明
pf = &Program::to_swap; // 第2步,使指针指向公共成员函数的地址
int first = 1, second = 2;
cout 《《 "first=" 《《 first 《《 "\tsecond=" 《《 second 《《 endl;
(app.*pf)(&first, &second); // 第3步,调用指向公用成员函数的指针
cout 《《 "first=" 《《 first 《《 "\tsecond=" 《《 second 《《 endl;
return 0;
}
C++|详解类成员指针:数据成员指针和成员函数指针及应用场合
对于类对象对于成员的调用,需要有类对象的限定,一方面是一个类命名空间,另一方面用于传递隐含的this指针。
数据和函数,包括类对象的数据成员和成员函数,都是可以寻址的,自然也可以定义一个指针,使其指向类成员或成员函数,然后通过指针来访问类的成员。这包括指向属性成员的指针和指向成员函数的指针。
关于数据的指针变量存储了具有特定数据类型的一个内存空间的首地址,确定了其指向的目标对象的蓝图,核心是由数据类型确定了目标对象所需内存空间大小,数据类型的编码和解码方式。关于代码的指针变量是指指向函数的指针变量,同样是首地址,类型是由函数签名所确定的类型,以及代码的指令集编码及读取和译码方式。
2.1 指向类数据成员的指针
2.1.1 定义
为了区别于普通指针变量,多了一个类名作用域限定,也显示了与类及类成员的相关性。
2.1.2 赋值&初始化
指向非静态数据成员的指针在定义时必须和类相关联,在使用时必须和具体的对象关联。
2.1.3 解引用
由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。
示例代码:
2.2 指向类成员函数的指针
定义一个指向非静态成员函数的指针必须在三个方面与其指向的成员函数保持一致:参数列表要相同、返回类型要相同、所属的类型要相同。
2.2.1 定义
为了区别于全局函数指针,多了一个类名作用域限定,也显示了与类及类成员的相关性。
2.2.2 赋值&初始化
2.2.3 解引用
由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定类的一个对象,然后,通过对象来引用指针所指向的成员。
示例代码:
指向非静态成员时,必须用类名作限定符,使用时则必须用类的实例作限定符。指向静态成员时,声明时则不需要使用类名作限定符。(当然静态成员做右值也需要类名限定)
用指向类员函数的指针,可以实现更加隐蔽的接口。
类函数指针与普通函数指针一样,也可以做函数参数,形成函数回调的效果,实现更加弹性和通用的代码。
***隐藏网址***
-End-
怎样在一个类的成员函数里调用这个类里public的函数指针成员
你的那个不对,下面是正确的。类中friend不是这么用的。friend + 友元类(类外)的类对象!或友元函数、变量。
#include "stdafx.h"
class classTest{
public:
void( *classTest::pClassFun)(); //类中函数指针,注意这里*号在左边括号
static void print(){
printf("called print");
};
};
int main(int argc, char* argv)
{
printf("Hello World!/n");
classTest ct;
ct.pClassFun=&ct.print //外部将类中函数指针赋值为类中函数地址 ,注意这里print是static即静态函数,否则不能赋值
(*ct.pClassFun)(); //外部调用函数
return 0;
}

更多文章:
unix和linux区别(Unix和Linux的区别是什么)
2026年10月14日 17:40
getrealpath参数(java怎么读取web工程里面的文件)
2026年10月14日 14:40
makefile文件怎么用(怎么打开使用makefile文件不是语法的依赖关系!!)
2026年10月14日 13:00
socket编程中(Socket 编程中 close() 和 shutdown() 有什么区别)
2026年10月14日 08:20
用jsp做一个登录网页(JSP作业,求大神写代码!编制一个简单的登录界面)
2026年10月14日 06:50
change directory(change directory是什么意思)
2026年10月14日 04:20
javascript基础教程第9版(js鼠标悬停显示文字实例)
2026年10月14日 03:50




