首页 > 试题广场 >

请选择下列程序的执行结果( )

[单选题]

请选择下列程序的执行结果()

#include<iostream>
using namespace std;
class A{    
	public:   
	void f(){
	    cout<<"A::f()";
	}
};
class B: public A{    
	public:        
		void f(){
			cout<<"B::f()";
	        };
};
int main(){  
	B b;
	b.f();  
}

  • A::f();B::f() 都不可能
  • A::f();B::f() 都有可能
  • A::f()
  • B::f()
这里的B类中的f()是A类中f()的重定义,重定义也称之为隐藏。子类重新定义父类中有相同名称的非虚函数(参数列表可以不同)。发生在继承中
发表于 2021-03-20 16:45:20 回复(0)
‘:’右边表示这个函数和类这个作用域下的方法。主函数创建了B的对象,调用了f的方法,相当于执行了B,A这个函数被重载了,跟上一个A函数没关系
发表于 2020-08-21 17:12:23 回复(4)

在程序中,类B继承自类A,并重写了f()方法。在main()函数中,创建了一个B类的对象b,并调用了它的f()方法。

由于B类重写了f()方法,因此在调用b.f()时,会优先调用B类的f()方法。因此,程序的输出为B::f()。

需要注意的是,在 C++ 中,方法可以通过关键字virtual声明为虚函数,从而实现运行时多态性。如果将A类和B类的f()方法都声明为虚函数,并且在main()函数中使用指针来调用f()方法,则程序的输出将会是B::f()。

发表于 2023-10-24 16:08:40 回复(0)
晕,这都能错
发表于 2023-03-03 08:25:22 回复(0)
重写必须满足:基类和派生类的参数列表相同,且基类函数有virtual关键字修饰
隐藏是:同名且不满足重写即为隐藏,所以这题是隐藏
发表于 2023-03-01 15:32:02 回复(0)