gpt4 book ai didi

c++ - 基类的继承和指针

转载 作者:行者123 更新时间:2023-11-30 01:57:19 25 4
gpt4 key购买 nike

我正在经历这个Book我无法解决这个问题:

如果 B::f(int) 隐藏了 A::f(),为什么 pa1->f(); 没有报错?

名称隐藏是否意味着 f() 函数不存在于 class B 中?如果 pa1 指向 class B 的对象,那么 pa1->f(); 应该会导致错误,就像 b.f () 确实如此!

请解释一下,因为我无法通过书来理解它!提前致谢!

#include <iostream>
using namespace std;

struct A {
virtual void f() { cout << "Class A" << endl; }
};

struct B: A {
void f(int) { cout << "Class B" << endl; }
};

struct C: B {
void f() { cout << "Class C" << endl; }
};

int main() {
B b; C c;
A* pa1 = &b;
A* pa2 = &c;
// b.f();
pa1->f();
pa2->f();
}

最佳答案

如果您试图从 B 的范围内调用 f() 将会出错。但是,您是通过指向基类的指针来调用它的。名称查找和重载解析是根据对象的静态类型完成的,在本例中为 A*。从那里,f() 是可见的。

关于c++ - 基类的继承和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849578/

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