对于第一道例题,晕掉了
#include <iostream>
using namespace std;
class A{
public:
A(int data=0)
{
m_data=data;
}
int GetData()
{
return doGetData();
}
virtual int doGetData()
{
return m_data;
}
protected:
int m_data;
};
class B:public A{
public:
B(int data=1)
{
m_data=data;
}
int doGetData()
{
return m_data;
}
protected:
int m_data;
};
class C:public B{
public:
C(int data=2)
{
m_data=data;
}
protected:
int m_data;
};
int main()
{
C c(10);
cout<<c.GetData()<<endl;
cout<<c.A::GetData()<<endl;
cout<<c.B::GetData()<<endl;
cout<<c.C::GetData()<<endl;
cout<<c.doGetData()<<endl;
cout<<c.A::doGetData()<<endl;
cout<<c.B::doGetData()<<endl;
cout<<c.C::doGetData()<<endl;
return 0;
}
当把A中doGetData()的virtual属性去掉 后:
#include <iostream>
using namespace std;
class A{
public:
A(int data=0)
{
m_data=data;
}
int GetData()
{
return doGetData();
}
int doGetData()
{
return m_data;
}
protected:
int m_data;
};
class B:public A{
public:
B(int data=1)
{
m_data=data;
}
int doGetData()
{
return m_data;
}
protected:
int m_data;
};
class C:public B{
public:
C(int data=2)
{
m_data=data;
}
protected:
int m_data;
};
int main()
{
C c(10);
cout<<c.GetData()<<endl;
cout<<c.A::GetData()<<endl;
cout<<c.B::GetData()<<endl;
cout<<c.C::GetData()<<endl;
cout<<c.doGetData()<<endl;
cout<<c.A::doGetData()<<endl;
cout<<c.B::doGetData()<<endl;
cout<<c.C::doGetData()<<endl;
return 0;
}