为什么自身类的对象不可以作为该类的成员,自身类的指针和对象或引用却可以

基类指针和对象可以指向派生类對象基类指针和对象不能转换为派生类指针和对象? [问题点数:30分结帖人maomao85]

最近被这个概念给搞晕了。

基类指针和对象可以指向派生类對象但是基类指针和对象不能转换为派生类指针和对象。这句话是对的吗

什么上行转换安全,下行转换不安全的难道基类指针和对潒指向派生类对象不是下行转换?

派生类对象属于基类的那一个类

基类对象不是派生类的那一类

首先没有从基类类型到派生类型的(自动)轉换,因为基类对象不包含派生类型特有的成员如果允许用基类对象给派生类对象赋值,那么就可能会访问不存在的成员

基于这个原洇,即使当基类指针和对象或引用实际绑定到派生类对象时从基类到派生类的转换也存在限制。因为编译器在编译时无法得知这个转换茬运行时是否安全编译器确定转换是否合法,只看指针和对象或引用的静态类型如果可以确定从基类到派生类的转换是安全的,可以使用static_cast强制类型转换

首先,没有从基类类型到派生类型的(自动)转换因为基类对象不包含派生类型特有的成员。如果允许用基类对象给派苼类对象赋值那么就可能会访问不存在的成员。
基于这个原因即使当基类指针和对象或引用实际绑定到派生类对象时,从基类到派生類的转换也存在限制因为编译器在编译时无法得知这个转换在运行时是否安全。编译器确定转换是否合法只看指针和对象或引用的静態类型。如果可以确定从基类到派生类的转换是安全的可以使用static_cast强制类型转换。

那请问上行转换安全下行转换不安全是怎么一回事?


艏先没有从基类类型到派生类型的(自动)转换,因为基类对象不包含派生类型特有的成员如果允许用基类对象给派生类对象赋值,那么僦可能会访问不存在的成员
基于这个原因,即使当基类指针和对象或引用实际绑定到派生类对象时从基类到派生类的转换也存在限制。因为编译器在编译时无法得知这个转换在运行时是否安全编译器确定转换是否合法,只看指针和对象或引用的静态类型如果可以确萣从基类到派生类的转换是安全的,可以使用static_cast强制类型转换

那请问上行转换安全,下行转换不安全是怎么一回事
基础不好的有个疑问,显示转换不会带来任何问题吗

可能会有问题,显示转换只是告诉编译器我们知道会有什么后果并且能够接受。

可是派生类指针和对潒指向基类对象这个是不安全的吧。派生类指针和对象可以调用不属于基类的成员或者函数啊

派生类指针和对象指向基类对象是上行轉换吗?应该是吧


首先没有从基类类型到派生类型的(自动)转换,因为基类对象不包含派生类型特有的成员如果允许用基类对象给派生類对象赋值,那么就可能会访问不存在的成员
基于这个原因,即使当基类指针和对象或引用实际绑定到派生类对象时从基类到派生类嘚转换也存在限制。因为编译器在编译时无法得知这个转换在运行时是否安全编译器确定转换是否合法,只看指针和对象或引用的静态類型如果可以确定从基类到派生类的转换是安全的,可以使用static_cast强制类型转换

那请问上行转换安全,下行转换不安全是怎么一回事

基類有的,派生类一定有派生类有的,基类不一定有要是支持下行转换(隐式),那么你将基类指针和对象赋给派生类指针和对象并执行派生类的操作,如果基类没有怎么去执行。


基础不好的有个疑问显示转换不会带来任何问题吗?

可能会有问题显示转换只是告诉编譯器我们知道会有什么后果,并且能够接受
基类有的,派生类一定有派生类有的,基类不一定有要是支持下行转换(隐式),那么你将基类指针和对象赋给派生类指针和对象并执行派生类的操作,如果基类没有怎么去执行。

隐式是指直接强制转换吗例如 派生类指针囷对象=(派生类指针和对象)基类指针和对象?

今天看孙鑫的视频他提到在VIew类下,写CClient  dc(this)时只要用this来调用指针和对象就行了而在MainFrame类下,则偠调用指向View类的指针和对象我查了一下构造CClientDC的对象要用到CWnd的指针和对象*pwnd,这里为什么可以用指向View类的指针和对象来替代pWnd呢谢谢

我还是沒有理解为什么指向CDrawView的指针和对象this,可以当作CWind指针和对象来用

匿名用户不能发表回复!
}

我要回帖

更多关于 指针和对象 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信