gpt4 book ai didi

C++ 方法仅在对象转换为基类时可见?

转载 作者:IT老高 更新时间:2023-10-28 21:38:57 26 4
gpt4 key购买 nike

它必须是我的代码中的特定内容,我无法发布。但也许有人可以提出可能的原因。

基本上我有:

class CParent
{
public:
void doIt(int x);
};
class CChild : public CParent
{
public:
void doIt(int x,int y,int z);
};

CChild *pChild = ...
pChild->doIt(123); //FAILS compiler, no method found
CParent *pParent = pChild;
pParent->doIt(123); //works fine

到底怎么样?

编辑:人们正在谈论阴影/隐藏。但是两个版本的 doIt 有不同数量的参数。当然这不会混淆编译器,子类中的重载不可能与父类版本混淆?可以吗?

我得到的编译器错误是:错误 C2660: 'CChild::doIt' : 函数不接受 1 个参数

最佳答案

你已经隐藏了一个方法。例如:

struct base
{
void method(int);
void method(float);
};

struct derived : base
{
void method(int);
// base::method(int) is not visible.
// base::method(float) is not visible.
};

您可以使用 using 来解决此问题指令:

class derived : public base
{
using base::method; // bring all of them in.

void method(int);
// base::method(int) is not visible.
// base::method(float) is visible.
};

既然您似乎对参数的数量很执着,我会解决这个问题。 这不会改变任何事情。观察:

struct base
{
void method(int){}
};

struct derived : base
{
void method(int,int){}
// method(int) is not visible.
};

struct derived_fixed : base
{
using base::method;
void method(int,int){}
};

int main(void)
{
{
derived d;

d.method(1, 2); // will compile
d.method(3); // will NOT compile
}
{
derived_fixed d;

d.method(1, 2); // will compile
d.method(3); // will compile
}
}

无论参数或返回类型如何,它都会仍然被遮蔽;它只是阴影的名称using base::<x>;将带来所有base的“<x>”方法进入可见性。

关于C++ 方法仅在对象转换为基类时可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2068088/

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