为什么C++可以将基类强制转换为派生类??

时间:2022-09-07 21:34:01
但C#不能

Derive* pd = (Derive*)(new Base());
pd->VirFun();

pd可以找到Base的虚方法。但在C#的编译器里编译不过?

14 个解决方案

#1


这么做很危险~

#2


C++ 相信程序员,C# 不相信。

#3


但是C++从来没说这么做是对的,是安全的。

#4


C++从来不推荐

#5


怎么不可以

#6


不建议这么写
一旦调用子类的函数就会出错

#7


引用 2 楼 proteas 的回复:
C++ 相信程序员,C# 不相信。

因为危险 所以不让C#里面这么做

#8


C风格的转换可以从任意一种指针转换成任意另外一咱指针。如果你用static_cast,肯定就不可以了。

#9


强制转换..
并不是C++可以将基类强制转换为派生类.这是 C 强制转换
Derive* pd = (Derive*)(new Base());  只是[指针]类型转换
就算是...........也可以
char *pc = (char *)(new Base); 
ccav *pp = (ccav *)(new Base);

// 只是指针类型转换, 跟 类 无关系, 这是两码事

#10


错字大王修正了:任意另外一 指针……

#11


C++为了兼容C语言的转换风格而产生的遗留问题吧!
何必纠结这个,试试C++风格的转换吧!

#12


引用 9 楼 doox8086 的回复:
强制转换..
并不是C++可以将基类强制转换为派生类.这是 C 强制转换
Derive* pd = (Derive*)(new Base()); 只是[指针]类型转换
就算是...........也可以
char *pc = (char *)(new Base); 
ccav *pp = (ccav *)(new Base);

// 只是指针类型转换, 跟 类 无关系, 这是两码事……



想法一样

#13


如果这样呢:
Derive* pd = dynamic_cast<Derive*>(new Base());

这是C++ 的转换了?

#14


带着C#的思维学C++,楼主的路痛苦着呢。
建议还是转java吧。

#1


这么做很危险~

#2


C++ 相信程序员,C# 不相信。

#3


但是C++从来没说这么做是对的,是安全的。

#4


C++从来不推荐

#5


怎么不可以

#6


不建议这么写
一旦调用子类的函数就会出错

#7


引用 2 楼 proteas 的回复:
C++ 相信程序员,C# 不相信。

因为危险 所以不让C#里面这么做

#8


C风格的转换可以从任意一种指针转换成任意另外一咱指针。如果你用static_cast,肯定就不可以了。

#9


强制转换..
并不是C++可以将基类强制转换为派生类.这是 C 强制转换
Derive* pd = (Derive*)(new Base());  只是[指针]类型转换
就算是...........也可以
char *pc = (char *)(new Base); 
ccav *pp = (ccav *)(new Base);

// 只是指针类型转换, 跟 类 无关系, 这是两码事

#10


错字大王修正了:任意另外一 指针……

#11


C++为了兼容C语言的转换风格而产生的遗留问题吧!
何必纠结这个,试试C++风格的转换吧!

#12


引用 9 楼 doox8086 的回复:
强制转换..
并不是C++可以将基类强制转换为派生类.这是 C 强制转换
Derive* pd = (Derive*)(new Base()); 只是[指针]类型转换
就算是...........也可以
char *pc = (char *)(new Base); 
ccav *pp = (ccav *)(new Base);

// 只是指针类型转换, 跟 类 无关系, 这是两码事……



想法一样

#13


如果这样呢:
Derive* pd = dynamic_cast<Derive*>(new Base());

这是C++ 的转换了?

#14


带着C#的思维学C++,楼主的路痛苦着呢。
建议还是转java吧。