由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 大侠给解释下c++为何会允许这种polymorphism?
相关主题
private destructor[合集] 关于template和inheritance的问题请教
a simple question for C++ classcompare double to float
请问一个exception题目[合集] C++问题(copy constructor)
两个继承问题问一个简单的C++问题
为什么我看不懂下面的code,是不是水平还不够?一个指向指针的指针的引用?
C++疑问问个char*的问题
two c++ interview questions! (转载)数组弱问
请教一个作用域的问题[合集] 关于构造函数
相关话题的讨论汇总
话题: clsbase话题: clsa话题: pbase话题: cast
进入Programming版参与讨论
1 (共1页)
v****s
发帖数: 1112
1
this program can compile and run.
return value:
-858993460
大侠给解释下c++语法为何会允许这种polymorphism? 这个返回值是怎么决定出来的?
#include
using namespace std;
class clsBase {
public:
char value;
};
class clsA : public clsBase {
public:
void * link;
};
class clsB : public clsBase {

};
int main(){
clsBase *pbase;
clsA a;
int i = 1077;
a.link = (void *)i;
clsB b;
pbase = & b;
cout<< (int)((clsA *)pbase)->link << endl;
getchar();
}
a****o
发帖数: 686
2
首先,这个问题和polymorphism没有任何关系。
其次,你这个向下cast,是强制类型转换,结果是undefined。
再次,i从指针型,转化为整型,再转化,意图何在?
综述,你这问题就是一砣一砣的强制转化。根本就没有polymorphism的事。
k******r
发帖数: 2300
3
First of all, in c++, we don't use c-style casting. We use static_cast,
dynamic_cast or reinterpret_cast in c++. In order to answer your question,
we need to explain it from static_cast and dynamic_cast separately(I put
reinterpret_cast aside because probably it is not your interest at this time
).
If you apply static_cast on a clsBase pointer to convert it to a clsA
pointer , since clsBase is base class of clsA, so it is perfectly legal. In
this case, there is not polymorphism involved. On the other hand, if you
apply dynamic_cast on a pbase to convert it to a clsA pointer, it will fail
because run time type of pbase at this time is of clsB*. This time
polymorphism does come into play.
Hopefully it helps.

【在 v****s 的大作中提到】
: this program can compile and run.
: return value:
: -858993460
: 大侠给解释下c++语法为何会允许这种polymorphism? 这个返回值是怎么决定出来的?
: #include
: using namespace std;
: class clsBase {
: public:
: char value;
: };

1 (共1页)
进入Programming版参与讨论
相关主题
[合集] 关于构造函数为什么我看不懂下面的code,是不是水平还不够?
C++菜问: 怎么这样也可以?C++疑问
c++之极弱问two c++ interview questions! (转载)
请教一个c++ reference问题请教一个作用域的问题
private destructor[合集] 关于template和inheritance的问题请教
a simple question for C++ classcompare double to float
请问一个exception题目[合集] C++问题(copy constructor)
两个继承问题问一个简单的C++问题
相关话题的讨论汇总
话题: clsbase话题: clsa话题: pbase话题: cast