//第一题 问下面的输出结果是 什么?
#include <stdio.h>
#include <iostream>
using namespace std;
class A
{
protected:
int m_data;
public:
A(int data = 0)
{
m_data = data;
}
int GetData()
{
return doGetData();
}
virtual int doGetData()
{
return m_data;
}
};
class B: public A
{
protected : int m_data;
public:
B(int data = 1)
{
m_data = data;
}
int doGetData()
{
return m_data;
}
};
class C : public B
{
protected : int m_data;
public :
C(int data = 2)
{
m_data = 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;
} <span style="white-space:pre"> </span><span style="font-family: Arial, Helvetica, sans-serif;">答: </span><span style="font-family: Arial, Helvetica, sans-serif;">为 1 1 1 1 1 0 1 1 具体请参看程序员面试宝典 P134</span>
第二题 :
#include <stdio.h>
#include <iostream>
using namespace std;
class A
{
protected:
int m_data;
public:
A(int data = 0)
{
m_data = data;
}
int GetData()
{
return doGetData();
}
int doGetData()
{
return m_data;
}
};
class B: public A
{
protected : int m_data;
public:
B(int data = 1)
{
m_data = data;
}
int doGetData()
{
return m_data;
}
};
class C : public B
{
protected : int m_data;
public :
C(int data = 2)
{
m_data = 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;
//cout << A::doGetData()<<endl; 这种调用方式是错的
return 0;
}
/*
结果为 0 0 0 0 1 0 1 1
*/
#include <stdio.h>
#include <iostream>
using names