指针调用类的函数(C++两个类如何通过指针相互调用对方的函数)
本文目录
- C++两个类如何通过指针相互调用对方的函数
- 基类指针可以指向一个派生类,然后调用派生类里的函数吗
- 类中函数指针调用函数
- 在c++中,如何定义利用指针将一个类的函数运用到另外一个类中
- 如何在A类中使用函数指针调用B类中的函数
- 如何用函数指针来调用类的成员函数,求高手解答
- 怎样在类中通过指针来实现成员函数调用成员函数
- 关于空类指针为什么可以调用类的成员函数
C++两个类如何通过指针相互调用对方的函数
交叉引用一般有两种方法
class B ;
class A
{
B* pb ;
void funA() ;
} ;
class B
{
A* pa ;
void funB() ;
}
void A::funA() { pb-》funB() ; } // warning of infinite loop here
void B:: funB() { pa-》funA() ; } // warning of infinite loop here
这是最常见的方式
------------------------------------------------
但上面方式有个严重的**, 必须要把类的定义和实现分开.这就意味着,
你不能类的实现放在.h中(并被多个.cpp包含), 不然就等着编译器在链接时抱怨"符号重定义"
因为类的定义作用域是单模块, 而函数的定义是扩模块的.
我平时写类库, 最怕的就是为个.h要写个.cpp,文件,太繁琐.
所以可以使用方法2
template《 class B 》
class A
{
B* pb ;
void funA() { pb-》funB() ; } // warning of infinite loop here
} ;
class B
{
A* pa ;
void funB() { pa-》funA() ; } // warning of infinite loop here
}
这种C++ idiom虽然说要让A引入策略B做为模板参数, 有些"做作"
但是交叉引用这种设计很多时候隐含着, 你的class A确实需要依赖策略B中的语义.
所以模板并不是单纯解决"双重引用"这个机制而诞生的, 而是class A在概念上对于策略B的自然依赖. 只是策略B除了用class B初始化, 还可以用其他类初始化
基类指针可以指向一个派生类,然后调用派生类里的函数吗
基类指针与派生类指针的相互转换
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
类中函数指针调用函数
你把head从函数里面拿出来,作为参数就可以了啊。
之前需要定义一个函数指针:typedef struct _Node (*Fun)(struct _Node *p);
然后定义show函数:
void show(Fun fun, struct _Node *head)
{
struct _Node *pTemp = NULL;
pTemp = fun(head);
}
这样就可以把head传进来了~
希望对你能有所帮助。
在c++中,如何定义利用指针将一个类的函数运用到另外一个类中
用组合就可以呀,如下所示:
class A
{
public:
int CalcZhouChang()
{
...
}
int CalcDiMianJi()
{
...
}
};
class B
{
public:
int CalcBiaoMianJi()
{
return m_a.CalcDiMianJi() * m_a.CalcZhouChang();
}
private:
A m_a;
};
如何在A类中使用函数指针调用B类中的函数
typedef void (*FuncPtr)(void);
class A{
public:
FuncPtr ptrFunc1;
FuncPtr ptrFunc2;
FuncPtr ptrFunc3;
};
class B{
public:
//函数必须定义成静态的
static void Func1()
{ printf("Func1() in class B called.\n"); }
static void Func2()
{ printf("Func2() in class B called.\n"); }
static void Func3()
{ printf("Func3() in class B called.\n"); }
};
int main()
{
A AObject;//定义A类的对象
B BObject;//定义B类的对象
AObject.ptrFunc1 = (FuncPtr)BObject.Func1;
AObject.ptrFunc2 = (FuncPtr)BObject.Func2;
AObject.ptrFunc3 = (FuncPtr)BObject.Func3;
AObject.ptrFunc1();
AObject.ptrFunc2();
AObject.ptrFunc3();
getchar();
return 0;
}
如何用函数指针来调用类的成员函数,求高手解答
成员函数是类才拥有的函数,
函数指针跟其他指针区别并不大,都是指针,它作为函数指针指向一个函数时,就当作函数的另一个名字访问即可
怎样在类中通过指针来实现成员函数调用成员函数
错误是因为“函数”和“成员函数”是有区别的,“成员函数”是属于一个特定的类的,普通的函数不是。所以说compute函数的参数是一个接受0个参数,没有返回值的“普通的函数”,而你传的参数show是属于类A的“成员函数”。写成下面这样就可以通过编译了
void compute(void (A::*p)()){}
void AA(){ compute(&A::show);}
关于空类指针为什么可以调用类的成员函数
class MyClass{public:int i;void hello(){printf("hello/n");}void print(){printf("%d/n", i);}};void main(){MyClass* pmy = NULL;
pmy-hello();}看上面的这段代码,似乎很诡异。 用一个空指针调用成员函数,简直是天大的错误,可以遗憾的是,却是可行的,至少对于上面的这段程序来说,不会照成错误。
之前运行的原因。
大家知道,每个对象,都有一个指向自己的this指针,这个指针的值,将会因为对象的不同而不同,它的作用主要就是用来区分不同的对象,这样你就可以根据它
更多文章:
roundup函数公式(预算计算公式中roundup是什么意思)
2026年4月3日 15:40
html游戏手机如何打开(如何使html5网页游戏封装成app后在安卓手机上全屏)
2026年4月3日 15:00
python 匹配字符串(python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进行替换)
2026年4月3日 14:00
bat批量移动文件命令(如何批量移动相同前缀名的文件至对应文件夹,请高手帮我写个bat)
2026年4月3日 13:40
指针调用类的函数(C++两个类如何通过指针相互调用对方的函数)
2026年4月3日 13:20
为了生活所做的事英语(英语翻译“我所做的一切都是为了生活,我讨厌现在的生活,但是我必须要用勇气,我知道我所做的一切都是值)
2026年4月3日 13:00




