65,209
社区成员
发帖
与我相关
我的任务
分享
class Shape
{
public:
Shape(){}
virtual ~Shape(){}
public:
virtual void Draw() = 0; //纯虚函数,子类必须要重写该函数
virtual void TestVirtualFunction() //虚函数,子类可以不重写该函数
{
std::cout << "Shape::TestVirtualFunction" << endl;
}
};
class Rect : public Shape
{
public:
Rect():Shape(){}
virtual ~Rect(){}
virtual void Draw() //必须重写 Draw 函数
{
std::cout << "Rect::Draw" << endl;
}
};
class Ellipse : public Shape
{
public:
Ellipse():Shape(){}
virtual ~Ellipse(){}
virtual void Draw() //必须重写 Draw 函数
{
std::cout << "Ellipse::Draw" << endl;
}
virtual void TestVirtualFunction()
{
std::cout << "Ellipse::TestVirtualFunction" << endl;
}
};
int main()
{
Shape* pRect = new Rect();
pRect->Draw(); //通过父类指针调用实际对象 Rect的函数,输出 Rect::Draw
pRect->TestVirtualFunction(); //没有重写基类的虚函数,调用基类的函数,输出: Shape::TestVirtualFunction
delete pRect;
Shape* pEllipse = new Ellipse();
pEllipse->Draw(); //通过基类的指针调用实际对象Ellipse的函数,输出: Ellipse::Draw
pEllipse->TestVirtualFunction();//通过基类的指针调用实际对象Ellipse的函数,输出: Ellipse::TestVirtualFunction
delete pEllipse;
}
这是最基本的,最好还是找本教材好好看看。