[C/C++]C++中虛擬函式的原理和虛擬函式表
阿新 • • 發佈:2019-01-22
#include
using namespace std;
class A{
public:
A();
virtual void fun1();
void fun2();
};
A::A()
{
}
void A::fun1()
{
cout<<"I am in class A fun1"<<endl;
}
void A::fun2()
{
cout<<"I am in class A fun2"<<endl;
}
class B:public A
{
public:
B();
virtual void fun1(); //預設的從父類繼承來,就是虛擬函式
void fun2();
};
void B::fun1()
{
cout<<"I am in class B fun1"<<endl;
}
void B::fun2()
{
cout<<"I am in class B fun2"<<endl;
}
B::B()
{
}
void main()
{
A a;
B b;
A *ptr;
ptr=&a;
cout<<"ptr=&a; prt->fun1(): "<<endl;
ptr->fun1();
cout<<"ptr=&a; prt->fun2(): "<<endl;
ptr->fun2();
ptr=&b;
cout<<"ptr=&b; prt->fun1(): "<<endl;
ptr->fun1();
cout<<"ptr=&b; prt->fun2(): "<<endl;
ptr->fun2();
using namespace std;
class A{
public:
A();
virtual void fun1();
void fun2();
};
A::A()
{
}
void A::fun1()
{
cout<<"I am in class A fun1"<<endl;
}
void A::fun2()
{
cout<<"I am in class A fun2"<<endl;
}
class B:public A
{
public:
B();
virtual void fun1(); //預設的從父類繼承來,就是虛擬函式
void fun2();
};
void B::fun1()
{
cout<<"I am in class B fun1"<<endl;
}
void B::fun2()
{
cout<<"I am in class B fun2"<<endl;
}
B::B()
{
}
void main()
{
A a;
B b;
A *ptr;
ptr=&a;
cout<<"ptr=&a; prt->fun1(): "<<endl;
ptr->fun1();
cout<<"ptr=&a; prt->fun2(): "<<endl;
ptr->fun2();
ptr=&b;
cout<<"ptr=&b; prt->fun1(): "<<endl;
ptr->fun1();
cout<<"ptr=&b; prt->fun2(): "<<endl;
ptr->fun2();