指针调用类的函数(C++两个类如何通过指针相互调用对方的函数)

:暂无数据 2026-04-03 13:20:01 0
常言道:“万丈高楼平地起”。理解指针调用类的函数这座大厦,也必须从C++两个类如何通过指针相互调用对方的函数这块基石开始。

本文目录

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指针,这个指针的值,将会因为对象的不同而不同,它的作用主要就是用来区分不同的对象,这样你就可以根据它

这篇文章的目的是成为你理解指针调用类的函数的可靠指南,尤其是扫清C++两个类如何通过指针相互调用对方的函数的障碍。如果它做到了,请收藏以备不时之需。你的支持是我们创作的最大动力!
本文编辑:admin

更多文章:


roundup函数公式(预算计算公式中roundup是什么意思)

roundup函数公式(预算计算公式中roundup是什么意思)

在深入了解roundup函数公式的路上,预算计算公式中roundup是什么意思就像一道绕不开的坎。别担心,本篇攻略将助你轻松跨越。

2026年4月3日 15:40

标题栏文字大小(标题栏的尺寸是什么)

标题栏文字大小(标题栏的尺寸是什么)

大家好,如果您对标题栏文字大小还心存疑问,别着急,今天这篇文章就将围绕标题栏的尺寸是什么为您展开详细解说。

2026年4月3日 15:20

html游戏手机如何打开(如何使html5网页游戏封装成app后在安卓手机上全屏)

html游戏手机如何打开(如何使html5网页游戏封装成app后在安卓手机上全屏)

html游戏手机如何打开的背后,隐藏着怎样的秘密?如何使html5网页游戏封装成app后在安卓手机上全屏又在其中扮演了何种角色?带着疑问,我们一起探秘。

2026年4月3日 15:00

网站url监控源码(怎么从html源码中获取URL链接)

网站url监控源码(怎么从html源码中获取URL链接)

我们注意到,那些在网站url监控源码上表现突出的人,往往都对怎么从html源码中获取URL链接有独到的见解。这并非巧合。

2026年4月3日 14:40

如何优化sql查询语句(数据库中怎么优化**L语句)

如何优化sql查询语句(数据库中怎么优化**L语句)

前几天,一位朋友问我:如何优化sql查询语句到底该怎么学?我只回了他三个字:抓住数据库中怎么优化**L语句。今天就来详细说说为什么。

2026年4月3日 14:20

python 匹配字符串(python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进行替换)

python 匹配字符串(python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进行替换)

本篇文章给大家谈谈python 匹配字符串,以及python如何用正则表达式匹配两个字符串之间的字符串中的某个字符并进行替换对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年4月3日 14:00

bat批量移动文件命令(如何批量移动相同前缀名的文件至对应文件夹,请高手帮我写个bat)

bat批量移动文件命令(如何批量移动相同前缀名的文件至对应文件夹,请高手帮我写个bat)

其实bat批量移动文件命令的问题并不复杂,但是又很多的朋友都不太了解如何批量移动相同前缀名的文件至对应文件夹,请高手帮我写个bat,因此呢,今天小编就来为大家分享bat批量移动文件命令的一些知识,希望可以帮助到大家,下面我们一起来看看这个问

2026年4月3日 13:40

指针调用类的函数(C++两个类如何通过指针相互调用对方的函数)

指针调用类的函数(C++两个类如何通过指针相互调用对方的函数)

常言道:“万丈高楼平地起”。理解指针调用类的函数这座大厦,也必须从C++两个类如何通过指针相互调用对方的函数这块基石开始。

2026年4月3日 13:20

为了生活所做的事英语(英语翻译“我所做的一切都是为了生活,我讨厌现在的生活,但是我必须要用勇气,我知道我所做的一切都是值)

为了生活所做的事英语(英语翻译“我所做的一切都是为了生活,我讨厌现在的生活,但是我必须要用勇气,我知道我所做的一切都是值)

有研究表明,成功掌握为了生活所做的事英语的学习者,普遍在英语翻译“我所做的一切都是为了生活,我讨厌现在的生活,但是我必须要用勇气,我知道我所做的一切都是值这个环节投入了更多精力。其重要性不言而喻。

2026年4月3日 13:00

小程序开发接单(微商接单小程序有哪些)

小程序开发接单(微商接单小程序有哪些)

很多新手在接触小程序开发接单时,都会在微商接单小程序有哪些这个问题上徘徊良久。本文将亮起指路明灯,带你快速通关。

2026年4月3日 12:40

最近更新

热门文章

springcloud各组件详解(18.SpringCloud有哪些组件)
2026-03-30 10:40:01 浏览:0
Linux重定向?C语言输入输出重定向
2026-03-31 05:20:01 浏览:0
标签列表