Description
In Java, all class are inherited from Object (对象类), but c++ don’t have
such featureAlso In Java, function instanceOf can return class name
Please implement these class below in instance.h
class Object;
class Animal: public Object;
class Dog: public Animal;
class Cat: public Animal;
class Vehicle: public Object;
class Bus: public Vehicle;
class Car: public Vehicle;
/*
* 返回这个对象实例实际的类型名
* 例如: Object *obj = new Bus();
* 则 instaceOf(obj) == "Bus"
* 若 obj == NULL
* 则 instanceOf(obj) == "NULL"
*/
string instanceOf(Object *obj);
The **relationship **of each class:
Object
/\
/ \
Animal Vehicle
/\ /\
/ \ / \
Dog Cat Bus Car
Sample Test
cout << instanceOf(NULL) << endl;
// 向上转型
Object *object = new Vehicle;
cout << instanceOf(object) << endl;
delete object;
// 向下转型
object = new Animal;
Animal *animal = dynamic_cast<Animal*>(object);
cout << instanceOf(animal) << endl;
Sample Output
NULL
Vehicle
Animal
引用块内容
// Google style don't allow dynamic_cast
// we use marco to trick the system
#include<iostream>
using namespace std;
/*
relationship of each class
Object
/\
/ \
Animal Vehicle
/\ /\
/ \ / \
Dog Cat Bus Car
*/
class Object
{
public:
virtual string name()=0;
virtual ~Object()
{
}
};
class Animal: public Object
{
public:
virtual string name()
{
return "Animal";
}
};
class Dog: public Animal
{
public:
string name()
{
return "Dog";
}
};
class Cat: public Animal
{
public:
string name()
{
return "Cat";
}
};
class Vehicle: public Object
{
public:
virtual string name()
{
return "Vehicle";
}
};
class Bus: public Vehicle
{
public:
string name()
{
return "Bus";
}
};
class Car: public Vehicle
{
public:
string name()
{
return "Car";
}
};
string instanceOf(Object *obj)
{
if (obj)
{
return obj->name();
}
return "NULL";
}