#include <iostream>
#include "vld.h"
using namespace std;
class Shape
{
public:
Shape(){ cout << "Shape()" << endl; }
virtual ~Shape(){ cout << "~Shape()" << endl; }
virtual void fun(){ cout << "Shape::fun()" << endl; }
};
class Rectangle : public Shape
{
public:
Rectangle()
{
cout << "Rectangle()" << endl;
fun();
i = new int;
*i = 10;
}
~Rectangle()
{
cout << "~Rectangle()" << endl;
if (NULL != i)
{
delete i;
i = NULL;
}
}
void fun(){ cout << "Rectangle::fun()" << endl; }
private:
int *i;
};
class Circle : public Shape
{
public:
Circle()
{
cout << "Circle()" << endl;
fun();
i = new int;
*i = 20;
}
~Circle()
{
cout << "~Circle()" << endl;
if (NULL != i)
{
delete i;
i = NULL;
}
}
void fun(){ cout << "Circle::fun()" << endl; }
private:
int *i;
};
int main(int argc, char *argv[])
{
Shape *shape = new Rectangle;
Shape *shape2 = new Circle;
Rectangle *rect = dynamic_cast<Rectangle*>(shape);
if (rect) cout << "shape is a rect" << endl;
Circle *circle = dynamic_cast<Circle*>(shape);
if (circle) cout << "shape is a circle" << endl;
Rectangle *rect2 = dynamic_cast<Rectangle*>(shape2);
if (rect2) cout << "shape2 is a rect" << endl;
Circle *circle2 = dynamic_cast<Circle*>(shape2);
if (circle2) cout << "shape2 is a circle" << endl;
delete shape;
shape = NULL;
delete shape2;
shape2 = NULL;
return 0;
}
C++关键字之dynamic_cast
最新推荐文章于 2022-08-02 09:04:32 发布