多重继承中的纯虚函数“妙用” (二)

2014-11-24 02:57:00 · 作者: · 浏览: 5
irtual void reset() = 0;
};

/// Middle virtual class ObSingleChildPhyOperator
class ObSingleChildPhyOperator : public ObPhyOperator
{
public:
virtual void reset() = 0;
};

void ObSingleChildPhyOperator::reset()
{
cout << "single" << endl;
}

/// ObFinalOperator
class ObFinalOperator: public ObSingleChildPhyOperator
{
public:
};

int main()
{
ObPhyOperator *phy = new ObFinalOperator();
return 0;
}

#include /* cin, cout */
using namespace std;

/// Base virtual class ObPhyOperator
class ObPhyOperator
{
public:
virtual void reset() = 0;
};

/// Middle virtual class ObSingleChildPhyOperator
class ObSingleChildPhyOperator : public ObPhyOperator
{
public:
virtual void reset() = 0;
};

void ObSingleChildPhyOperator::reset()
{
cout << "single" << endl;
}

/// ObFinalOperator
class ObFinalOperator: public ObSingleChildPhyOperator
{
public:
};

int main()
{
ObPhyOperator *phy = new ObFinalOperator();
return 0;
}

报错依旧:


[cpp]
virtual_structure.cpp: In function ‘int main()’:
virtual_structure.cpp:52: error: cannot allocate an object of abstract type ‘ObFinalOperator’
virtual_structure.cpp:35: note: because the following virtual functions are pure within ‘ObFinalOperator’:
virtual_structure.cpp:45: note: virtual void ObSingleChildPhyOperator::reset()

virtual_structure.cpp: In function ‘int main()’:
virtual_structure.cpp:52: error: cannot allocate an object of abstract type ‘ObFinalOperator’
virtual_structure.cpp:35: note: because the following virtual functions are pure within ‘ObFinalOperator’:
virtual_structure.cpp:45: note: virtual void ObSingleChildPhyOperator::reset()
看来,必须在ObFinalOperator中实现reset方法:


[cpp]
#include /* cin, cout */
using namespace std;

/// Base virtual class ObPhyOperator
class ObPhyOperator
{
public:
virtual void reset() = 0;
};

/// Middle virtual class ObSingleChildPhyOperator
class ObSingleChildPhyOperator : public ObPhyOperator
{
public:
virtual void reset() = 0;
};

void ObSingleChildPhyOperator::reset()
{
cout << "single" << endl;
}

/// ObFinalOperator
class ObFinalOperator: public ObSingleChildPhyOperator
{
public:
virtual void reset();
};


void ObFinalOperator::reset()
{
cout << "final" << endl;
// ObSingleChildPhyOperator::reset();
}


int main()
{
ObPhyOperator *phy = new ObFinalOperator();
return 0;
}

#include /* cin, cout */
using namespace std;

/// Base virtual class ObPhyOperator
class ObPhyOperator
{
public:
virtual void reset() = 0;
};

/// Middle virtual class ObSingleChildPhyOperator
class ObSingleChildPhyOperator : public ObPhyOperator
{
public:
virtual void reset() = 0;
};

void ObSingleChildPhyOperator::reset()
{
cout << "single" << endl;
}

/// ObFinalOperator
class ObFinalOperator: public ObSingleChildPhyOperator
{
public:
virtual void reset();
};


void ObFinalOperator::reset()
{
cout << "final" << endl;
// ObSingleChildPhyOperator::reset();
}


int main()
{
ObPhyOperator *phy = new ObFinalOperator();
return 0;
}

编译通过,bingo~