gpt4 book ai didi

C++ 基类函数在子类中重载

转载 作者:行者123 更新时间:2023-11-30 00:47:04 26 4
gpt4 key购买 nike

<分区>

鉴于以下...

#include <iostream>
using namespace std;

class BaseClass {
public:
void Func(float f) {
cout << "BaseClass:Func() called!";
}
};

class SubClass : public BaseClass {
};

int main() {
SubClass sub;
sub.Func(1.1f);
return 0;
}

这运行得非常像人们预期的那样,导致以下输出...

BaseClass:Func() called!

但是,如果我将以下函数添加到 SubClass...

class SubClass : public BaseClass {
public:
void Func(int i) { // accepts an int, not a float!
cout << "SubClass::Func() called!";
}
};

与任何其他重载一样,如果我提供一个 int 作为我的参数,我希望调用 SubClass 函数,如果我提供一个 float ,则调用 BaseClass 函数。但是,如果我按原样运行程序(即使用 float ),情况并非如此......

SubClass::Func() called!

与我预期的不同,我提供的 float 被强制转换为一个整数,并且调用了 SubClass 函数。看起来 SubClass 的功能有效地隐藏了 BaseClass 的功能,即使它的签名不同。

有人可以阐明这一点吗?有没有一种方法可以通过 SubClass 实例调用 BaseClass 函数而不必强制转换它?

谢谢!

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