上型转换:
#include <iostream>
using namespace std;
class Animal
{
public:
Animal(){}
~Animal(){}
void Play(){}
};
class Dog:public Animal
{
public:
Dog(){}
~Dog(){}
void Play(){}
};
class Cat:public Animal
{
public:
Cat(){}
~Cat(){}
void Play(){}
};
int main()
{
Animal* dog1 = new Dog(); //dog1实例化的是派生类,声明的类型是基类 上型转换
cout << "Hello" << endl;
Dog* dog2 = (Dog*)dog1; // dog1声明的类型是基类,强制转换成子类,下型转换
delete dog1;
dog1 = NULL;
return 0;
}
dog1是一个基类对象的引用,只能使用父类的方法,虽然实例化的还是子类,但是自身特有的方法会丢失。所以,父类引用指向子类对象,只能调用到来自父类的属性和行为。
下型转换
animal dog =new Dog()
Dog dog1 = (Dog)dog
dog是父类型,所以只能看到父类的属性和方法,dog1是子类型,是父类型强制转换的子类型,所以可以看到子类的属性和方法。dog1的转换就是父类引用转换成子类的引用,从继承树的角度讲就是下