1.virtual用在继承的时候 虚继承
#include <iostream>
using namespace std;
class A
{
public:
int m_a;
A();
virtual void print();
};
A::A()
{
print();
}
void A::print()
{
cout<<"this is A"<<endl;
}
class B:virtual public A
{
public:
int m_b;
void print();
};
void B::print()
{
cout<<"this is B"<<endl;
}
int main()
{
/*A a;
B b;
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
cout<<&a<<endl;
cout<<&a.m_a<<endl; //+4 其中有个虚函数表指针*/
B b;
//A *pa=&b;
cout<<sizeof(b)<<endl;
cout<<&b<<endl;
cout<<&b.m_b<<endl;
cout<<&b.m_a<<endl;
return 0;
}
之所以隔了8,只因为m_b和m_a中间还有个虚指针;
2.虚函数
#include<iostream>
using namespace std;
class A
{
public:
virtual void print()
{
cout<<"AA"<<endl;
}
};
class B:public A
{
public:
void print()
{
cout<<"BB"<<endl;
}
};
int main()
{
A *pa=new A;
pa->print();
A *pb=new B;
pb->print();// 没加virtual:AA 加virtual:BB
cout<<pa<<" "<<pb<<endl;
delete pa;
delete pb;
return 0;
}
由于加了virtual pb直接调用B的print();