#include<iostream>
using namespace std;
class A {
public:
void foo() {
cout << "foo" << endl;
}
virtual void bar() {
cout << "bar" << endl;
}
A() {
bar();
}
virtual ~A() {
cout << "I am A over" << endl;
}
};
class B :public A {
public:
void foo() {
cout<<"b_foo"<<endl;
}
void bar() {
cout << "b_bar" << endl;
}
B() {
bar();
}
~B() {
cout << "I am B over" << endl;
}
};
int main() {
A* p = new B;//生成类B类型的对象,此对象具有的虚表为类B的虚表
p->foo();//foo为非虚函数,类B虚表中没有foo,所以只是调用类A的foo函数
p->bar();//bar为虚函数,调用类B中的bar函数
delete p;//如果类A不加virtual,会只析构类A部分
return 0;
}
类继承中的多态重写与覆盖
最新推荐文章于 2024-08-04 22:43:03 发布