c++中覆盖的问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 12:34:30
#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 <&

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 <<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;

大哥,你函数调用不写()的啊

我运行的结果是的确是 1 1 1 1 1 0 1 1
我使用了g++ 4.2.4 和 g++ 3.4.2 都是这个结果

可能是您使用的编译器不符合标准的原因 或者 是您弄错了某些地方