};
/// 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
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
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
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~