首页 > 试题广场 >

下列程序的运行结果是() class A { ...

[单选题]
下列程序的运行结果是()
class A {
public:
    void f() {
        cout << "A::f()";
    }
};

class B: public A {
public:
    void f() {
        cout << "B::f()";
    }
};
int main() {
    B b;
    b.f();
    return 0;
}
  • A::f()
  • A::f()B::f()
  • B::f()
  • B::f()A::f()

如果子类的函数与父类的名称相同,但是参数不同,父类函数被隐藏(重定义)

如果子类函数与父类函数的名称相同&&参数也相同&&但是父类函数没有virtual,父类函数被隐藏

如果子类函数与父类函数的名称相同&&参数也相同&&但是父类函数有virtual,父类函数被覆盖(重写)
编辑于 2019-08-17 12:04:57 回复(3)
跟构造函数的执行顺序不同。注意区分!
发表于 2022-09-07 20:12:25 回复(0)
本题选错的可能会选到A选项,这和下面的情况混淆了,如果是下面那样,那么就是选A
int main() {
    B b;
    A &p = b;
    p.f();            // 此时因为A中没有将f声明为虚函数,那么就会调用A中的fun函数
    return 0;
}
而本题,是将A中的成员方法给隐藏了

发表于 2022-03-12 14:59:31 回复(0)

如果子类的函数与父类的名称相同,但是参数不同,父类函数被隐藏(重定义)

如果子类函数与父类函数的名称相同&&参数也相同&&但是父类函数没有virtual,父类函数被隐藏

如果子类函数与父类函数的名称相同&&参数也相同&&但是父类函数有virtual,父类函数被覆盖(重写)
发表于 2021-09-14 08:50:26 回复(0)
奥,这不是构造函数
发表于 2021-06-21 10:28:08 回复(0)
单纯考虑调用就行~
发表于 2021-04-20 16:22:20 回复(0)