C++ 虚函数和多态性:A类指针指向B类对象,调用成员函数的输出结果

程序代码:

#include<iostream>
using namespace std;
class A {
	public:
	virtual void funcl() {
		cout'A1';
	}
	void func2() {
		cout'A2';
	}
};
class B:public A {
	public:
	void func1() {
		cout'B1';
	}
	void func2() {
		cout'B2';
	}
};
int main() {
	A *p=new B;
	p->funcl();
	p->func2();
	return 0;
}

输出结果:

C. B1A2

解析:

  1. A类有两个成员函数,funcl()为虚函数,func2()为普通函数。
  2. B类继承自A类,有两个成员函数,func1()func2(),其中func2()与A类的func2()同名,但是B类并未将其声明为虚函数。
  3. main函数中,创建了一个指向B类对象的A类指针p
  4. p->funcl()调用的是B类重写的A类虚函数funcl(),因此输出B1
  5. p->func2()调用的是A类的func2(),因为p是A类指针,所以输出A2。注意,这里并没有调用到B类的func2(),因为它与A类的func2()同名,但是不是虚函数,所以不会被子类重写。

总结:

当一个父类指针指向子类对象时,调用父类虚函数,会执行子类重写的虚函数;而调用父类普通函数,则会执行父类中的函数。

C++ 虚函数和多态性:A类指针指向B类对象,调用成员函数的输出结果

原文地址: https://www.cveoy.top/t/topic/oLU7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录