C++ 虚函数和多态性:A类指针指向B类对象,调用成员函数的输出结果
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
解析:
- A类有两个成员函数,
funcl()为虚函数,func2()为普通函数。 - B类继承自A类,有两个成员函数,
func1()和func2(),其中func2()与A类的func2()同名,但是B类并未将其声明为虚函数。 - 在
main函数中,创建了一个指向B类对象的A类指针p。 p->funcl()调用的是B类重写的A类虚函数funcl(),因此输出B1。p->func2()调用的是A类的func2(),因为p是A类指针,所以输出A2。注意,这里并没有调用到B类的func2(),因为它与A类的func2()同名,但是不是虚函数,所以不会被子类重写。
总结:
当一个父类指针指向子类对象时,调用父类虚函数,会执行子类重写的虚函数;而调用父类普通函数,则会执行父类中的函数。
原文地址: https://www.cveoy.top/t/topic/oLU7 著作权归作者所有。请勿转载和采集!