gpt4 book ai didi

类的 C++ 函数重载

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:00 24 4
gpt4 key购买 nike

我有3个类(class)

class A { 
//...
}

class B : public A {
//...
}

还有一个 C 类:

#include "A.h"
#include "B.h"

class C
{
void method(A anObjOfA);
void method(B anObjOfB);
}

现在如果我这样做

B* ptr = new B();
A* ptrToB = ptr;
c.method(*ptrToB);

它调用类型 A 的对象的方法,而不是继承的实际类型 B.. 我如何确保调用继承树最深处对象的正确函数,而实际上不知道它在编译时的类型?

PS:我确定这是一个菜鸟问题,对于我来说我在这里找不到任何结果,因为每个人都在忙于理解“虚拟”关键字,这对我来说非常清楚但是不是这里的问题。

最佳答案

因为解析函数重载是在编译时完成的。当您调用该函数时,它只会看到指针的 A 部分,即使它可能指向 B。

也许你想要的是:

class A
{
public:
virtual void DoWorkInC()
{
cout << "A's work";
}
virtual ~A() {}
};

class B : public A
{
public:
virtual void DoWorkInC()
{
cout << "B's work";
}
};

class C
{
void method(A& a)
{
a.DoWorkInC();
}
}

关于类的 C++ 函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26165651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com