子类指针转换成父类指针时,指针值会变化

指针转换在C++中再正常不过了,特别是子类向父类的转换,一般情况下转换后指针值是不会变的。但是某些特殊情况,子类指针转换成父类指针,指针值会产生一定的偏移量,至于为什么就不清楚了。要确保指针值不变,可以先将指针转成void*,再根据实际情况强制转换成需要的类型就可以了。

本文地址:http://www.cnblogs.com/vcpp123/p/5902866.html

参考文章:

C++多重继承下的指针类型转换

http://www.veryhuo.com/a/view/52953.html

http://blog.csdn.net/chinabinlang/article/details/37879393

时间: 2024-12-15 04:16:51

子类指针转换成父类指针时,指针值会变化的相关文章

查询复杂对象用respsbody转换成json串时,mybatis的延迟加载报错的解决方法

在查询数据时,如果你查询的是复杂的对象需要通过respsbody转换成json串时,mybatis用的延迟加载会报以下错误: 解决方法:第一步在RequestMapping(参数中加入 produces =  "application/json")表示将功能处理方法将生产json格式的数据,此时根据请求头中的Accept进行匹配,如请求头"Accept:application/json"时即可匹配.第二步:在实体类中前面加上注解@JsonInclude(JsonIn

佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所看到的: 经百度:字符串变量和整型变量连接不能用+连接. 于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了. 正确代码例如以下所看到的: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH

佩特来项目经验小集合(2)___组合查询存储过程,报错 "varchar JBID='' 转换成数据类型 int 时失败"

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所示: 经百度:字符串变量和整型变量连接不能用+连接.于是我采用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就解决了.正确代码如下所示: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH varchar(

sqlserver 在将 nvarchar 值 'XXX' 转换成数据类型 int 时失败

最近做oracle和sqlserver数据库兼容,感觉sqlserver真心没oracle好用,存储过程竟然只能返回int类型,疯了 疯了 存储过程的output及return的区别 sql取整 ceiling() RETURN从查询或过程中无条件退出.RETURN 即时且完全,可在任何时候用于从过程.批处理或语句块中退出.不执行位于 RETURN 之后的语句.返回的整型值.存储过程可以给调用过程或应用程序返回整型值 除非特别指明,所有系统存储过程返回 0 值表示成功,返回非零值则表示失败. 当

在将 varchar 值 '2,7' 转换成数据类型 int 时失败

消息 245,级别 16,状态 1,第 1 行在将 varchar 值 '2,7' 转换成数据类型 int 时失败. 原sql select  UserName from s_User  where Id in ( select UndertakerList from ZW_HandlerSend where HsID=7 ) 改成 select  UserName from s_User  where  charindex(rtrim(Id), (select top 1 Undertaker

在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败。

alter PROCEDURE PrTradingDelete @id VARCHAR(4000) AS BEGIN UPDATE dbo.Trading SET IsDel=1 WHERE id in(@id) END GO 执行上面这个存储过程会异常.提示 :在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败. 将存储过程更改为: alter PROCEDURE PrTradingDelete @id VARCHAR(4000) AS BEGIN U

sql 在将 nvarchar 值 转换成数据类型 int 时失败。

假设有存储过程:proc_test2 create proc proc_test2 @Id int begin as declare @sql varchar(max) @sql = 'select * from test2 where 1=1' if @Id <> 0 set @sql += ' and Id = ' +@Id exec (@sql) end 存储过程需要的参数是int类型,按道理直接传值([email protected])是没有问题的,但是在执行存储过程的时候,却弹出 “

在将 varchar 值 转换成数据类型 int 时失败。

写了个存储过程是这样的 create proc [dbo].[GetHotKeys](  @top int,  @where nvarchar(1000) )as declare @sqlStr nvarchar(1000) if @top<>''    set @sqlStr='select top '+cast(@top as varchar(10))+' * from  hotkeys '[email protected] else    set  @sqlStr='select * f

sql in(1,2,3)参数化查询,错误在将 varchar 值 &#39;1,2,3,4&#39; 转换成数据类型 int 时失败

解决办法 string userIds = "1,2,3,4";using (SqlConnection conn = new SqlConnection(connectionString)){ conn.Open(); SqlCommand comm = new SqlCommand(); comm.Connection = conn; comm.CommandText = string.Format("select * from Users(nolock) where U