(1).为何父类对象不能转化为子类对象,而父类指针可以强制转换为子类指针??
(2).为何父类指针转换为子类指针需要显式转换而子类指针转换为父类指针不用显式转换??例:(1)classA{};//父类classB:publicA{};//子类Aa;...
(2).为何父类指针转换为子类指针需要显式转换而子类指针转换为父类指针不用显式转换??
例:(1)
class A{}; //父类
class B: public A
{};//子类
A a;//父类对象
B b;//子类对象
A *Pa;//父类指针
B *Pb;//子类指针
Pb=(Pb *)Pa; 合法
b=a; 非法
Pa=Pb; 合法
Pb=Pa; 非法
Pb=(Pb*)Pa; 合法
请高人解释!!!!!! 展开
例:(1)
class A{}; //父类
class B: public A
{};//子类
A a;//父类对象
B b;//子类对象
A *Pa;//父类指针
B *Pb;//子类指针
Pb=(Pb *)Pa; 合法
b=a; 非法
Pa=Pb; 合法
Pb=Pa; 非法
Pb=(Pb*)Pa; 合法
请高人解释!!!!!! 展开
3个回答
展开全部
对象之间不能相互赋值。就好比教师类对象赋值给学生类对象,没有可赋值性。
而指针具有可赋值性。指向教师类的指针,指向学生类的指针。如果两者赋值的话,意思是两个指针指向同一个对象。
顺便说下:
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法是不安全的。
而指针具有可赋值性。指向教师类的指针,指向学生类的指针。如果两者赋值的话,意思是两个指针指向同一个对象。
顺便说下:
1,直接用基类指针引用基类对象
2,直接用派生类指针引用派生类对象
3,用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的,
但是只能引用基类成员。若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误。(解决该问题的答案是虚函数和多态性)
4,用派生类指针引用基类的对象。这种引用方式会导致语法错误。派生类指针必须先强制转换为基类指针,这种方法是不安全的。
追问
貌似有些问题呢
1.对象之间是可以赋值的啊
比如累的拷贝构造函数 和 等号的重载
就是为了对象之间的相互复制用的啊
2.基类的指针转化为派生类的才需要显式转化的吧
而派生类指针转化为基类指针是不需要转化的吧
请您试试 貌似是这样的
展开全部
这个太简单了吧 一只鸡必然是是一个动物 一个动物不一定是一只鸡啊
当编译器知道这是一个动物的时候 你得告诉他 这个动物是鸡 它才能让这只鸡吃小米啊
当编译器知道这是一个动物的时候 你得告诉他 这个动物是鸡 它才能让这只鸡吃小米啊
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先对象之间的转换
子类对象转换为父类对象
有赋值兼容性原则 ,所以 可以转换成功。内容如下:
父类对象转换为子类对象
所有的指针间都可以强制转换 (显式转换)。这个要程序员把控转换后对程序的影响。关于指针的理解:
至于为什么子类转换为父类不需要显式转换,参考赋值兼容性原则。因为编译器内部是支持的。而且编译器可以把控转换后的影响。
子类对象可以当作父类对象使用
子类对象可以直接赋值给父类对象
子类对象可以直接初始化父类对象
父类指针可以直接指向子类对象
父类引用可以直接引用子类对象
编译器角度:C++编译器并不支持这种语法
理论角度:和”猫是动物,而动物不一定是猫” 一样的
2.其次对象指针之间的转换
指针本身是一个变量,它的类型可以是基础类型(char、int、long....),或者是类类型(如Vector、list、map的对象)。无论指针的数据类型是怎样的,本质就是存储了一个地址(如0x112233),所占用的内存单元是4个字节(32位系统)。转换后只是改变了指针的步长。但是存储的地址是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询