dynamic_cast转换类指针的问题 [问题点数:40分,结帖人csshow]

Bbs2
本版专家分:108
结帖率 100%
Bbs12
本版专家分:381353
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs7
本版专家分:17633
版主
Blank
优秀版主 2016年10月优秀小版主
优秀小版主
使用DYNAMIC_DOWNCAST转换指针为空,强制类型转换就可以???
IDC_BUTTON_TEST是对话框上一个button控件的ID。 使用DYNAMIC_DOWNCAST: 使用强制类型<em>转换</em>:
dynamic_cast到void*的转换
<em>dynamic_cast</em> &amp;lt; type-id &amp;gt; ( expression )If type-id is void*, a run-time check is made to determine the actual type of expression. The result is a pointer to the complete object pointed to by expr...
尽量使用安全的转换方式qobject_cast,少用强制转换
以前,我在使用C++编程的时候,总是忽略强制类型<em>转换</em>和安全的<em>转换</em>之间的区别,直到今天遇到这个<em>问题</em>,让我以后绝对要使用安全的<em>转换</em>方式,否则实在太坑了!今天遇到的<em>问题</em>是在实现一个动态界面的时候出现的。在使用QTreeWidget时,我需要根据一些数据设置每一个QTreeWidgetItem里面包含的QComboBox中的项目类型和数量。然后我需要知道当前选择的QComboBox到底属于哪个QTreeWi
dynamic_cast与 static _cast:类的上下行转换
A为基类,B为派生类。现在定义:   A* pA; B* pB; 一般来说,pB可以<em>转换</em>为pA,(把派生类的<em>指针</em>或引用<em>转换</em>成基类表示),称之为上行<em>转换</em>。 但反之一般是不行的,也就是将pA<em>转换</em>为pB,(把基类<em>指针</em>或引用<em>转换</em>成派生类表示),称之为下行<em>转换</em>。这种行为直接用(*类名)的方式来进行是错误的。 然而,下行<em>转换</em>并非绝对不可以。要进行下行<em>转换</em>,需
dynamic_cast彻底明白了~
<em>dynamic_cast</em> &lt; type-id &gt; ( expression) 该运算符把expression<em>转换</em>成type-id类型的对象。Type-id必须是类的<em>指针</em>、类的引用或者void*; 如果type-id是类<em>指针</em>类型,那么expression也必须是一个<em>指针</em>,如果type-id是一个引用,那么expression也必须...
dynamic_cast的几种情况
一览本文目的基类有虚函数基类无虚函数尾语 本文目的 &nbsp;   最近秋招看到一个有意思的<em>问题</em>,对一个没有虚函数的对象使用<em>dynamic_cast</em>会发生什么情况。想一想平时基本没用过<em>dynamic_cast</em>,于是干脆写点代码验证一下各种情况。首先验证对有虚函数的基类的<em>指针</em>和引用(2种情况),指向基类本身和其派生类(2种情况),一共四种情况的结果。然后验证基类没有虚函数时的这四种情况。 基类...
使用dynamic_cast转换问题
帮忙看看是什么<em>问题</em>:[code=C/C++]rn#include rn#include rn#include rnusing namespace std;rnvoid write(ostream &file)rn ofstream &file1=<em>dynamic_cast</em>(file);rn file1.put('a');rnrnint main()rn string filename;rn cin>>filename;rn ofstream ifile;rn ifile.open(filename.c_str(),ofstream::app);rn write(ifile);rn rn ifile.close();rn ifile.clear();rn return 0; rnrn[/code]
dynamic_cast转换问题
[code=C/C++]rn#include rnusing namespace std;rnclass basernrnpublic:rn base():x(0),y(0)rn virtual ~base()rnrnprivate:rn int x;rn int y;rn;rnclass base1 :public basernrnpublic:rn base1():base(),z(0)rn virtual ~base1()rnprivate:rn int z;rn;rnint main()rnrn base a;rn base1 b;rn base *a1=&b;rn rn if(base1 *pb=<em>dynamic_cast</em>(a1))rn rn cout<<
dynamic_cast指针动态转换的时候有警告信息怎么回事?
父类 basern子类 sonrnrnbase *p=new son;rnson *q=<em>dynamic_cast</em> (p);rn还有就是,传递<em>指针</em>的时候<em>指针</em>指的是子类,传进了函数之后我用<em>dynamic_cast</em>在转回子类类型的rn<em>指针</em>就报错,而且是编译的时候不报错,运行的时候报!!rnrn我郁闷呀!使用<em>dynamic_cast</em>的时候我该注意什么呀,我觉得自己的用法和MSND上的一样呀!
请教关于 dynamic_cast 转换问题
类的结构是这样的:rnCBase 基类rnCDerive 派生类,派生自CBasernCUse1 派生自 CDerivernCUse2 也派生自 CDerivernrn现在一个函数 f(CDerive *p) 传递了一个 CDerive <em>指针</em>rn在函数内部,我想把 *p 用 <em>dynamic_cast</em> 转化为 CUse1 rnrnCUse1 *pUse = <em>dynamic_cast</em>(p);rnrn结果出现了错误。。。(非法操作)为什么呢?rnrnBTW: 就算是成功了,我怎么才能动态的区分p 是 CUse1 还是 CUse2 呢?rnrn高手指教,谢!
C++中深入理解dynamic_cast
<em>dynamic_cast</em>运算符的主要用途:将基类的<em>指针</em>或引用安全地<em>转换</em>成派生类的<em>指针</em>或引用,并用派生类的<em>指针</em>或引用调用非虚函数。如果是基类<em>指针</em>或引用调用的是虚函数无需<em>转换</em>就能在运行时调用派生类的虚函数。 前提条件:当我们将<em>dynamic_cast</em>用于某种类型的<em>指针</em>或引用时,只有该类型含有虚函数时,才能进行这种<em>转换</em>。否则,编译器会报错。 <em>dynamic_cast</em>运算符的调用形式如下所示: dy
static_cast和dynamic_cast详解
类继承关系图注:从图中可以看出,派生类不仅有自己的方法和属性,同时它还包括从父类继承来的方法和属性。当我们从派生类向基类<em>转换</em>时,不管用传统的c语言还是c++<em>转换</em>方式都可以百分百<em>转换</em>成功。但是可怕是向下<em>转换</em>类型,也就是我们从基类向派生类<em>转换</em>,当我们采用传统的C语言和c++<em>转换</em>时,就会出现意想不到的情况,因为<em>转换</em>后派生类自己的方法和属性丢失了,一旦我们去调用派生类的方法和属性那就糟糕了,这就是对类继承关
dynamic_cast
运行时类型识别(run-time type identification,RTTI)的功能由俩个运算符实现: 1.typeid运算符,用于返回表达式的类型 2.<em>dynamic_cast</em>运算符,用于将父类的<em>指针</em>或引用安全地<em>转换</em>成子类的<em>指针</em>或引用 当我们将这俩个运算符用于某种类型的<em>指针</em>或引用,并且该类型含有虚函数时,运算符将使用<em>指针</em>或引用所绑定对象的动态类型 适用情况:我们想使用父类对象的<em>指针</em>或应...
使用boost::dynamic_pointer_cast对基类到子类的转换
-
C++ 中dynamic_cast<>的使用方法
/*这是从网上摘下的例子,主要讲述了 <em>dynamic_cast</em> /* 作用:将一个基类对象<em>指针</em>(或引用)cast到继承类<em>指针</em>,<em>dynamic_cast</em>会根据基类<em>指针</em>是否真正指向继承类<em>指针</em>来做相应处理,        即会作一定的判断。        对<em>指针</em>进行<em>dynamic_cast</em>,失败返回null,成功返回正常cast后的对象<em>指针</em>;        对引用进行dynamic_c
指针的安全转化dynamic_cast
注意:基类<em>指针</em>不可以转化为派生类<em>指针</em>!!! 通常人的做法都是直接强制转化,那样实际上是不安全的。可以先看一下这个博客的讲解,然后再看我下面的代码 http://blog.sina.com.cn/s/blog_4eaff3e10101jope.html #include #include #include using namespace std; class C1 { public: C
指针类形转换
int a, *b;rnrnb = (int *)a;rnrn这样可以嘛?rn若可以的话,a未初始化,<em>转换</em>后b的值也只是0xcccccccc,和没执行一样,有意义嘛?
dynamic_cast:安全转换
上行<em>转换</em>:子类<em>指针</em>转父类<em>指针</em> 下行<em>转换</em>:父类<em>指针</em>转子类<em>指针</em> 上行<em>转换</em>一定是安全的。即由子类<em>指针</em>转为父类<em>指针</em>。 下行<em>转换</em>可能会有<em>问题</em>。 1.     对于上图,A是父类: ①  A*转B*:下行<em>转换</em>,使用<em>dynamic_cast</em>会得到null 即定义一个对象A*,然后使用<em>dynamic_cast</em>将其<em>转换</em>为B*。下同。 ②  B*转A*:上行<em>转换</em>,使用<em>dynamic_cast</em>会得到
C++转换符(dynamic_cast
关于linux下dynamic_cast无法正确转换问题
如题.我的编程环境:ubuntu 6.06 g++4.03rn我有一个类SubClass,继承于FatherOne,FatherTwo.产生一个libSubClass.so,接着在MainProgram.cpp中调用.rn下面是所以的文件内容.rn-------------SubClass.h----------------------------------rn#include rnusing namespace std;rn#include "FatherOne.h"rn#include "FatherTwo.h"rnrnclass SubClass : public CFatherOne, public CFatherTwornrnpublic:rn SubClass();rn ~SubClass(); rn virtual int init (); rn virtual void ShowName();rn;rnrn-----------SubClass.cpp----------------------------------rn#include "SubClass.h"rnrnSubClass::SubClass()rnrnSubClass::~SubClass()rnrnint SubClass::init()rnrn cout << "dll init!" << endl;rn return 0;rnrnrnvoid SubClass::ShowName()rnrn cout << "this is a function from father two!" << endl;rnrnrnrnextern "C" FatherOne* CreatClass();rnFatherOne* CreatClass()rnrn return new SubClass();rnrnrn------------------FatherOne.h-----------------------rnclass FatherOnernrnpublic:rn virtual ~FatherOne();rn virtual int init()return 0;;rn;rnrn------------------FatherTwo.h-----------------------rnclass FatherTwornrnpublic:rn virtual ~FatherTwo();rn virtual void ShowName();rn;rnrn上面几个文件产生libSubClass.sorn命令:g++ -shared -o libSubClass.so SubClass.cpprnrn----------------MainProgram.cpp-------------------rn#include rn#include "FatherOne.h"rn#include "FatherTwo.h"rn#include rnusing namespace std;rnrnint main(int argc, char *argv[])rnrn void *hDLL;rn typedef CFatherOne* (*Creator)(void);rn FatherOne *one;rn rn hDLL = dlopen("./libSubClass.so",RTLD_NOW);rn if (hDLL == NULL)rn rn cout << "Loaded failed!" << endl;rn return 1;rn rn Creator creator;rn creator = (Creator)dlsym(hDLL, "CreatClass");rn if (creator == NULL)rn rn cout << "Get function address failed!" << endl;rn return 2;rn rnrn one = creator();rn if (obj == NULL)rn rn cout << "Creating failed!" << endl;rn return 3;rn rn rn one->init();rn rn [color=#FF0000](关键就是在下面这句,不能达到想要的目的)[/color]rn FatherTwo* two = <em>dynamic_cast</em>(one);rnrn if (two == NULL)rn rn cout << "Convertion failed!" << endl;rn return 4;rn rn two->ShowName();rn return 0;rnrn产生可执行文件:MainProgramrn命令: g++ -ldl -o MainProgram MainProgram.cpprnrn说明: 如果不用动态连接库.直接在MainProgram.cpp中包含SubClass.h,执行下面的代码就能成功rnFatherOne* one = new SubClass();rnone->init();rnFatherTwo* two = <em>dynamic_cast</em>(one);rntwo->ShowName();rn但是使用动态连接库才是我要用的.rn还有就是这种写法, 在WINDOWS下面是行得通的.rnrn请兄弟们帮助, 最好下载我的代码, 并实验. 万分感谢.rn
dynamic_cast到底有什么用啊?
class B{}; class C : public B {}; class D : public C {}; void main() { D* pd = new D; C* pc = dynami
C++中static_cast和dynamic_cast强制类型转换
前言 说起C++中的继承、多态、虚函数等概念,可能很多同学都有所了解,但是要说真正熟知的同学可能就不是很多了。最近在编程过程中了解到C++类型的层次<em>转换</em>(这就涉及到了多态和继承的相关概率),通常C语言中可以对内置类型进行强制<em>转换</em>,但是这样做不是很安全,在C++标准中,提供了关于类型层次<em>转换</em>中的两个关键字static_cast和<em>dynamic_cast</em>。
C++11的dynamic_cast
用于将基类的<em>指针</em>或者引用安全地转化成派生类的<em>指针</em>或者引用。一般格式如下: <em>dynamic_cast</em>&amp;lt;type*&amp;gt;(e) <em>dynamic_cast</em>&amp;lt;type&amp;amp;&amp;gt;(e) <em>dynamic_cast</em>&amp;lt;type&amp;amp;&amp;amp;&amp;gt;(e) type必须是类类型,并且通常情况下含有虚函数。第一种形式中,e必须是有效<em>指针</em>;第二种形式中,e必须是左值;第三种情况必须...
C++ dynamic_cast实现原理
<em>dynamic_cast</em>是一个操作符,查看
请教一个关于用dynamic_cast转换问题
<em>dynamic_cast</em>能被用于安全地沿着类的继承关系向下进行类型<em>转换</em>,也就是说, 能用<em>dynamic_cast</em>把指向基类的<em>指针</em>或引用<em>转换</em>成指向其派生类或其兄弟类的<em>指针</em>或引用, 但不知道我写的一个小测试程序为什么会抛出异常? 希望各位大虾帮帮忙。rnrnrn#include rnusing namespace std;rnrnclass Brnrnpublic:rn virtual void print() cout << " B class" << endl; rn;rnrnclass D1 : public Brnrnpublic :rn void print() cout << " D1 class " << endl;rn;rnrnclass D2 : public Brnrnpublic:rn void print() cout << " D2 class " << endl;rn;rnrnrnvoid fn(D1 *ptr)rnrn ptr->print();rnrnrnint main()rnrn B *pb = new B;rn D1 d1;rn D2 d2;rnrn fn(&d1);rn fn( <em>dynamic_cast</em> (pb) ); // 请问为什么会抛出异常?rnrn
dynamic_cast问题
#include rnrnusing namespace std;rnrnrnclass Arnrnpublic :rn virtual void f() constrn cout << "A" << endl;rn rn void g() rn cout << "Ag" << endl;rn rn;rnrnclass B : public Arnrnpublic:rn void f() rn cout << "B" << endl;rn rn void g() rn cout << "Bg" << endl;rn rn;rnrnint main()rnrn A * b = new B();rn B * bb;rn if (bb = <em>dynamic_cast</em>< B * > (b)) rn rnrnrnrnrn为什么会报错?
dynamic_cast问题
<em>dynamic_cast</em>的作用是什么?使用中有何需注意的地方?谢谢
dynamic_cast 问题
这程序主要是测试<em>dynamic_cast</em>的,为什么我在VC6下一运行就错误呢,请问哪错了,如何修改?rnrnrnrn#includern#includernusing namespace std;rnclass Arnrnpublic:rn A()rn virtual void display();rn;rn//假设基类的源代码由提供商提供,源代码不可见。rnclass B:public Arnrnpublic:rn B()rn void display()rn cout<<<<
dynamic_cast用法总结
<em>dynamic_cast</em> &lt; type-id &gt; ( expression) 该运算符把expression<em>转换</em>成type-id类型的对象。Type-id必须是类的<em>指针</em>、类的引用或者void*; 如果type-id是类<em>指针</em>类型,那么expression也必须是一个<em>指针</em>,如果type-id是一个引用,那么expression也必须是一个引用。 ...
dynamic_cast详解
作为四个内部类型<em>转换</em>操作符之一的<em>dynamic_cast</em>和传统的C风格的强制类型<em>转换</em>有着巨大的差别。除了<em>dynamic_cast</em>以外的<em>转换</em>,其行为的都是在编译期就得以确定的,<em>转换</em>是否成功,并不依赖被<em>转换</em>的对象。而<em>dynamic_cast</em>则不然。在这里,不再讨论其他三种<em>转换</em>和C风格的<em>转换</em>。首先,<em>dynamic_cast</em>依赖于RTTI信息,其次,在<em>转换</em>时,<em>dynamic_cast</em>会检查<em>转换</em>的sourc
C++,dynamic_cast关键字怎么用
#include "iostream" using namespace std; enum TYPE{HORSE,PEGASUS}; class horse { public: virtual voi
dynamic_cast 不正常的失败,RTTI输出奇怪
-
Dynamic_cast C++类与对象问题 继承和多态问题,求大神修改
-
dynamic_cast
代码如下:rnrn#include rnrnstruct Arnrnpublic:rn virtual void foo() rn;rnrnclass B:public A;rnrnclass C:public A;rnrnint main()rn rn A *pa=new C;rn rn B *pb = <em>dynamic_cast</em>(pa);// pb为什么为null。rn if(!pb)rn std::cout << "null" << std::endl;rn elsern pb->foo();rnrn return 0;rnrnrn我使用g++编译,然后执行,没有错误。可是使用vc编译后执行却是非法。rnwhy?
指针转换问题
我有一个这样的函数rnm_pMsgWnd->PostMessage(WM_READYRECEIVEFILE,(WPARAM)svArg1,nArg); rnsvArg1是传入的参数,是char*的。调试时,svArg1指向的值是0012rnrn然后,在自定义的消息函数里,想获取svArg1所指向的值,给char*的<em>指针</em>,rn用的是strcpy(m_sClientID,(char*)wID);rn可跟踪到的结果是m_sClientID是"0012 -”,为什么?如何能得到正确的值?
C++ dynamic_cast
不使用旧式类型<em>转换</em> 有很多理由让我们不使用C风格的旧式类型(old-style casts)。 主要原因有: 相比新式类型<em>转换</em>的格式,旧式类型<em>转换</em>很难从文本中查找出来 将各种不同使用类型<em>转换</em>的场景分离,分别进行处理,有利于编译器诊断出错误 新式类型<em>转换</em>对于出错有相应更完备的处理,很多错误在编译时就能发现 新风格的类型<em>转换</em>中最让人迷惑的是<em>dynamic_cast</em>,首先,让我们考虑一下:在什...
dynamic_cast 运算符
<em>dynamic_cast</em> 运算符 Visual Studio 2015 其他版本     若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。 将操作数 expression <em>转换</em>成类型为type-id 的对象。   语法 <em>dynamic_cast</em> &amp;lt; type-id &amp;gt; ( expr...
C++新式转型之dynamic_cast
C++ <em>dynamic_cast</em>
一个指针转换问题
rn大家比较一下这段程序在win32平台与mobile 5.0平台下的结果:rn我测试结果是Win32平台,都没有<em>问题</em>。可以正常运行rn但是在mobile5.0平台下。<em>问题</em>来啦:rnrn运行到13行,没有<em>问题</em>。可是我通过一个test(unsigned char *buf)传进去的时候,rn运行到第3行就出错 啦。这是为什么呢?第3行与第13行代码一样的。难道传进去的参数内存溢出。怎么解决呢?rnrn1行 void test(unsigned char*buf)rn2行rn3行 *(unsigned short*)&buf[0] = *(unsigned short*)&buf[1];rn4行rn5行main()rn6行rn7行 //测试类型<em>转换</em>rn8行 unsigned char tempbuffer[1024]=0;rn9行 rn10行 unsigned short tempshort=0;rn11行 tempshort = *(unsigned short*)&tempbuffer[1];rn12行rn13行 *(unsigned short*)&tempbuffer[0] = *(unsigned short*)&tempbuffer[1];rn14行 test(tempbuffer);rn15行rn16行
关于指针转换问题
[code=C/C++] static void * & nextof(void * const ptr)rn return *(static_cast(ptr)); [/code]rn这段是boost::pool的代码,侯捷虽然对此有说明,但是比较模糊。rn他认为<em>转换</em>成二次<em>指针</em>的时候,然后再求*过后的<em>指针</em>的值,同原来那个<em>指针</em>也就是ptr,推进了4字节。rn大家不要不好意思,发表高见。rn
指针转换问题
有一个字符串rnunsigned char str[] = "abc";rn然后申请一个长整型<em>指针</em>rn unsigned long *ptr = (unsigned long*)str;rnrn请问 ptr['x']指向的内容是什么呢? 是str指向的字符编码值吗? 还是地址的值呢?
指针 转换 问题..急!
工程为单文档FormViewrnrn我在dlg2里面定义了一个CWnd *m_pParentWnd;rnrn我在CXXXtView里面给赋值m_pParentWnd = this;rnrn在dlg2里面怎么用m_pParentWnd调用CXXXtView里面的函数?rnrn
关于dynamic_cast抛出异常
为什么 <em>dynamic_cast</em> 通过try{……}catch(bad_cast){……}不能捕获<em>指针</em>强转抛出的异常,亦或者根本不抛出异常? class A { public: virtual M()
dynamic_cast与一般的强制转换
接触过C语言的同学可能很喜欢使用C风格的强制<em>转换</em>(也就是一般形式的强转)。 (类型)变量 用起来很方便,可以显式的把某些类型<em>转换</em>成我们想要的类型,比如(int*)字符。这样的使用对常见的内置类型可谓是屡试不爽,但是对于C++中的对象用起来却是危机四伏。所以<em>dynamic_cast</em>应运而生。 我们很容易查到<em>dynamic_cast</em> 的定义是将一个基类对象<em>指针</em>(或引用)cast到继承类<em>指针</em>,dy
dynamic_cast,我需要更多的解释.
<em>dynamic_cast</em>是c++ builder的专有操作符吗,另我还想对这个操作符进行更深的理解,越详细越好.
常规施法 vs 静态施法 vs 动态施法[复制]
-
关于dynamic_cast、static_cast转换做安全检查的不同
<em>dynamic_cast</em>主要用于在父类、基类<em>指针</em>的<em>转换</em>。 从派生类<em>指针</em>转向基类<em>指针</em>时,即进行上行<em>转换</em>,是安全的。 从基类<em>指针</em>转向派生类<em>指针</em>时,即进行下行<em>转换</em>,要求基类至少有一个虚函数,并会做安全检查,<em>转换</em>后的<em>指针</em>为空。但是如果基类的<em>指针</em>本来就指向的派生类对象,下行<em>转换</em>也是安全的。 1.<em>dynamic_cast</em><em>转换</em>基类、派生类<em>指针</em> class CBase { virtual void di...
C++ ,指针, 转换问题
[code=C/C++]rnrn#define FAKE_THSI 0x00000000rn#define FAKE_MBFUNCTION 0x00000000rnstruct TempClassrn;rntypedef void(TempClass::* LPTHISCALLPTR)(int);rnrnvoid Foo()rnrn TempClass * pFakeThis = FAKE_THSI;rn LPTHISCALLPTR pFakeMember = FAKE_MBFUNCTION; //在这里,如何用非NULL值对其初始化 或者之后对其赋值?rn rn // 以下<em>转换</em>全部失败rn //pFakeMember = LPTHISCALLPTR(1); //Errorrn //pFakeMember = (LPTHISCALLPTR)1; //Errorrn //pFakeMember = static_cast(1); //Errorrn //pFakeMember = reinterpre_cast(1); //Errorrnrn //我用的替代方法:rn FillPtr(pFakeMember,(void*)1);rn rn // 用特别指定的地址来构成 thiscall 调用,包括this<em>指针</em>和成员函数地址都被强制指定rn (pFakeThis->*pFakeMember)(0);rnrn void FillPtr(void * pDest, void * SpecAddr)rnrn *(void**)pDest = SpecAddr;rnrn[/code]rnrn请问对 “pFakeMember ”的强制<em>转换</em>赋值该用什么方法?rnrn
指针转换问题
#includernint main(int argc,char *argv[])rnrn int a[5]=1,2,3,4,5;rn int *ptr=(int *)(&a+1); //意思是把地址强制<em>转换</em>成int型吗?这里不太明白rn printf("%d,%d\n",*(a+1),*(ptr-1));rn return 0;rnrnrn程序输出rn2,5rnrn又是数组和<em>指针</em>这<em>问题</em>[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/4.gif][/img]
指针转换问题???
我想把一个Pointer类型的通用<em>指针</em>变量<em>转换</em>为Integer类型的<em>指针</em>变量然后取出rn其中的整数。
句柄,指针转换问题.
rnvoid Cxxx::memfunction()rnrn HBITMAP hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"access.bmp",rn 0,0, 0,LR_LOADFROMFILE||LR_DEFAULTCOLOR);rn //HBITMAP hbmp=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(uRes));rn //ASSERT(hbmp!=NULL);rn rn CBitmap* pBmp=FromHandle(hbmp); //编译错误!为什么?应该不会错误的啊.rn//=============================================================rn 错误信息: cannot convert parameter 1 from 'struct HBITMAP__ *' to 'struct HWND__ *'rn Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style castrn//=============================================================rn for (int i = -1; i < GetCount(); i++)rn rn SetItemData(i, (DWORD)pBmp);rn rn return TRUE;rn
dynamic_cast 动态强制类型转换
(<em>dynamic_cast</em>必须要有虚函数才能进行<em>转换</em>,static_cast静态<em>转换</em>,不安全。) 运行时类型信息通过运算符<em>dynamic_cast</em>来提供。Dynamic_cast用来向下转型,将基类<em>指针</em><em>转换</em>为派生类<em>指针</em>.(把基类<em>指针</em><em>转换</em>为派生类<em>指针</em>) 运算符<em>dynamic_cast</em>(ptr)用来将一个<em>指针</em>类型<em>转换</em>为另外一个<em>指针</em>类型。它经常用来检查一个基类<em>指针</em>是否实际指向的是派生类对象。 pt
C++中 dynamic_cast用法
作用:将一个基类对象<em>指针</em>(或引用)cast到继承类<em>指针</em>,<em>dynamic_cast</em>会根据基类<em>指针</em>是否真正指向继承类<em>指针</em>来做相应处理, 即会作一定的判断。 对<em>指针</em>进行<em>dynamic_cast</em>,失败返回null,成功返回正常cast后的对象<em>指针</em>; 对引用进行<em>dynamic_cast</em>,失败抛出一个异常,成功返回正常cast后的对象引用。 注意:dy...
牛客练习赛47 题解
A DongDong破密码: 给定n,m,给出长度为n的01串,每次向后移动一位,移动m-1次,最后求出这n+m-1位每一位的异或值成为密码。 给出密码,问长度为n的01串是怎样的。 2&amp;lt;=n+m&amp;lt;=10000002&amp;lt;=n+m&amp;lt;=10000002&lt;=n+m&lt;=1000000,保证有解 分析: 密码第iii位设为aia_iai​,原...
C++ 深入理解 虚继承、多重继承和直接继承
C++ 深入理解 虚继承、多重继承和直接继承
C++ dynamic_cast运算符的使用
RTTI是运行阶段类型识别(Runtime Type Identification)的简称。主要是在运行阶段确定对象的类型提供的一种标准方式。 使用场景:有一个类层次结构,其中的类都是从同一个基类中派生而来的,则可以让基类<em>指针</em>指向任何一个派生类的对象。 这就是多态,在运行的时候决定调用哪个类中的函数。在处理一些信息后,选择一个类,并且创建该类的对象,然后放回这个对象的地址,并且把该地址赋值给基类指...
成员变量指针转换问题?
class Arnrnpublic:rnint i;rnrnrn...rnA a;rn&A::i 的类型是(int A::*)rn&a.i 的类型是(int*)rn请问有办法<em>转换</em>吗??rn(int A::*)(8)不能成功rn
dynamic_cast时出现了问题,总是返回NULL
郁闷郁闷啊 我的<em>dynamic_cast</em>总是返回NULL啊 #include using namespace std; class B { public: char a; cha
dynamic_cast 转引用
#include #include using namespace std; class M { public: M(){}; virtual ~M(){};
dynamic_cast(Source)!=0;这句什么意思?
请详细说说.我不明白..
【C++】强制类型转换-static_cast、dynamic_cast、reinterpret_cast、和const_cast
一、C方式的类型<em>转换</em> (1)语法: (Type)( Expression ) Example: #include &amp;lt;stdio.h&amp;gt; typedef void(PF)(int); struct Point { int x; int y; }; int main() { int v = 0x12345; PF* pf = (PF*)v; //将int 类型的...
关于指针转换问题
Child child; //一个类对象 rnDWORD point1 = (DWORD)&child; //<em>转换</em>提示<em>指针</em>被截断rnDWORD_PTR point1 = (DWORD_PTR)&child; //正常.rnrn我保存这个point1;rn象这样的<em>指针</em><em>转换</em>应该怎么处理好?????
指针转换问题,急!!!!
如何将一个如下定义的<em>指针</em>(LPVOID pVoid)<em>转换</em>成一个指向自定义结构类型的<em>指针</em>?要求还是用pVoid,这个<em>指针</em>变量。请高手指点迷津!只有25分给,不好意思!
详解Static_cast , Dynamic_cast及其背后的RTTI思想
<em>问题</em>: Static_cast 与 Dynamic_cast的区别 来自书本上的解释:   用 static_cast ( expression )   1. static_cast(expression) The static_castlong, int->short etc.    用来数值之间的转化。 2.  可以在相关<em>指针</em>之间<em>转换</em>,<em>指针</em>在void * 之间<em>转换</em>
RTTI---dynamic_cast
什么是RTTI? RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的<em>指针</em>或引用来检查这些<em>指针</em>或引用所指的对象的实际派生类型。 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回<em>指针</em>和引用所指的实际类型。 (2)<em>dynamic_cast</em>操作符,将基类类型的<em>指针</em>或引用安全地<em>转换</em>为派生类型的<em>指针</em>或引用。 typeid函数 该函...
一个由dynamic_cast导致的问题
0x00 <em>dynamic_cast</em>&amp;lt;&amp;gt;简介 将指向基类的<em>指针</em>或者引用<em>转换</em>成指向这个基类派生类的<em>指针</em>或者引用,<em>转换</em>成功将会得到派生类的<em>指针</em>或者引用,如果失败,将会返回一个null。用法如下: <em>dynamic_cast</em>&amp;lt;type *&amp;gt;(msg) <em>dynamic_cast</em>&amp;lt;type &amp;amp;&amp;gt;(msg) 0x01 <em>问题</em>描述 一个类成员函数中使用if-e...
请教:dynamic_cast和static_cast的区别的一个例子
Bjarne Stroustrup写的哦。 <em>dynamic_cast</em>和static_cast的区别的一个例子,但是文中"if pb points to a B (only)"是什么意思? class
那位大神详细说下static_cast 和dynamic_cast的区别是什么
那位大神详细说下static_cast 和<em>dynamic_cast</em>的区别是什么
一个指针转换问题
问个<em>问题</em>rnByte pData[10];rn_int16 *pInt16;rnpData[0]=0x00;rnpData[1]=0x00;rnpData[2]=0xd7;rnpInt16=(_int16 *)(&pData[1]);rn*pInt16 =0xd700 还是 0x00d7 ?
dynamic_cast转换指针时,基类需要虚函数
虚函数对于<em>dynamic_cast</em><em>转换</em>的作用  为何使用<em>dynamic_cast</em><em>转换</em>类<em>指针</em>时,需要虚函数呢。Dynamic_cast<em>转换</em>是在运行时进行<em>转换</em>,运行时<em>转换</em>就需要知道类对象的信息(继承关系等)。如何在运行时获取到这个信息——虚函数表。  C++对象模型中,对象实例最前面的就是虚函数表<em>指针</em>,通过这个<em>指针</em>可以获取到该类对象的所有虚函数,包括父类的。因为派生类会继承基类的虚函数表,所以通过这个...
dynamic_cast主要用于“安全地向下转型
<em>dynamic_cast</em>主要用于“安全地向下转型 <em>dynamic_cast</em>用于类继承层次间的<em>指针</em>或引用<em>转换</em>。主要还是用于执行“安全的向下转型(safe downcasting)”,也即是基类对象的<em>指针</em>或引用<em>转换</em>为同一继承层次的其他<em>指针</em>或引用。 至于“向上转型”(即派生类<em>指针</em>或引用类型<em>转换</em>为其基类类型),本身就是安全的,尽管可以使用<em>dynamic_cast</em>进行<em>转换</em>,但这是没必要的, 普通的<em>转换</em>已...
C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用
C风格的强制<em>转换</em>较简单,如将float a<em>转换</em>为int b,则可以这样:b = (int)a,或者b=int(a)。 C++类型<em>转换</em>分为隐式类型<em>转换</em>和显示类型<em>转换</em>。 隐式类型<em>转换</em>又称为标准<em>转换</em>,包括以下几种情况: (1)、算术<em>转换</em>:在混合类型的算术表达式中,最宽的数据类型成为目标<em>转换</em>类型; (2)、一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型; (3)、将一个表达式作...
static_cast 和 dynamic_cast 的区别
本文很多题目都是来源用于网上,如有侵权,请及时通知。和别人不同的是,有些题目加上了自己的思考。标记为【Jacob】第一部分:简答题1. 一下C++中static_cast 和 <em>dynamic_cast</em> 的区别。答:static_cast 用于有比较明确定义的变换,包括不需要强制<em>转换</em>的变换。【others】l  <em>dynamic_cast</em> 适用于类型安全的向下<em>转换</em>,常用在继承中的父类<em>指针</em>向子类<em>指针</em>的转...
static_cast与dynamic_cast类型转换
static_cast:类型<em>转换</em>:static_cast&amp;lt;type&amp;gt;(exdivssion),例k = static_cast&amp;lt;double&amp;gt;(1234)①把空<em>指针</em><em>转换</em>成目标类型的空<em>指针</em>②把任何类型的表达式<em>转换</em>成void类型③用于基本数据类型之间的<em>转换</em>④用于类层次结构中基类和子类之间<em>指针</em>或引用的<em>转换</em>→上行<em>转换</em>,即把子类的<em>指针</em>或引用<em>转换</em>成基类表示(安全)→下行<em>转换</em>,即把基类指...
JavaScript DOM编程艺术 源代码下载
JavaScript DOM编程艺术 源代码 相关下载链接:[url=//download.csdn.net/download/daniao2003/175185?utm_source=bbsseo]//download.csdn.net/download/daniao2003/175185?utm_source=bbsseo[/url]
将python文件转换成可执行文件,支持python2.7下载
PyInstaller使用简介 http://www.pyinstaller.org/ 开始: 第一次使用时,需要运行PyInstaller目录中的Configure.py程序,它会将一些 有关Python等的环境信息储存于config.dat中,以便日后使用。此程序只需运行 一次,如果更改Python的版本或路径,则需重新运行此程序。 准备: 在主程序的目录下执行下面的指令。 python <PyInstaller Dir>/Makespec.py xxxx.py 其中,xxxx.py是主程序,如果成功,在目录下面会多一个xxxx.spec文件,此 文件会被后面的步骤所使用。 相关下载链接:[url=//download.csdn.net/download/pqwer99/2719035?utm_source=bbsseo]//download.csdn.net/download/pqwer99/2719035?utm_source=bbsseo[/url]
SublimeText3(3083)带汉化包-注册码下载
带汉化包、注册码。内附使用说明。 Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器,方便的配色以及兼容vim快捷键等各种优点博得了很多前端开发人员的喜爱!Sublime Text 2这款程序员必备代码编辑器,几乎每位程序员提到Sublime Text 2都是赞不绝口!它体积小巧,无需安装,绿色便携;它可跨平台支持Windows/Mac/Linux;支持32与64位操作系统,它在支持语法高亮、代 码补全、代码片段(Snippet)、代码折叠、行号显示、自定义皮肤、配色方案等所有其它代码编辑器所拥有的功能的同时,又保证了其飞快的速度!还有着 自身独特的功能,比如代码地图、多种界面 相关下载链接:[url=//download.csdn.net/download/zhoaya188/9133843?utm_source=bbsseo]//download.csdn.net/download/zhoaya188/9133843?utm_source=bbsseo[/url]
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件
我们是很有底线的