c++中子类转父类,父类转子类

 

#include <iostream>
using namespace std;

class Father
{
    public:
        virtual void show()
        {
            cout<<"this is Father"<<endl;
        }
};

class Son:public Father
{
    public:
        virtual void show()
        {
            cout<<"this is Son"<<endl;
        }
        void shows()
        {
            cout<<"this is Son private"<<endl;
        }
};
/*
 *只有子类可转为父类父类不可转为子类,因为子类包含父类所有的元素
 *父类对象可接受任何子类对象---此时发生自动转型-->转为父类类型-->所以能够再转回来
 */ 
int main()
{
    Father f,*f1,f2;
    Son s,*s1;
    /*
     *子类向父类类型转换,直接强制转换就可以了,但实际仍然指向子类对象
     *子类强制转换为父类对象时,并没有实际丢失它原有内存空间(比父类多的那些部分)只是暂时不可访问。所以能再转回来
     *编译器进行切割,把子类从父类继承来的那一部分切割出来给父类 
     */
    f1=(Father *)&s;
    f1->show();//调用的仍然是子类的函数 
    
    //父类转为子类,转置后,只能操作子类从父类继承那一部分 
    //Son *s=new Father;  error
    s1=dynamic_cast<Son *>(f1);//再转回来 dynamic_cast在将父类cast到子类时,父类必须要有虚函数,多态性
    s1->show();
    s1->shows();//调用子类特有的函数 
    return 0;
}

 

转载于:https://www.cnblogs.com/tianzeng/p/9775310.html