C++类型转换运算符的使用方法

C++提供了四个新的类型转换运算符:

const_cast

dynamic_cast

reinterpret_cast

static_cast

使用方法:cast_operator  <type>  (object)

类型转换操作符  要转换的类型 要进行转换的对象

①dynamic_cast 将一个基类引用或指针转换位一个派生类应用或指针,或者将一个派生类引用或指针转换为一个基类引用或指针。

例:

class Shape { ... };
  class Circle : public Shape { ... };
  Shape *sp;
  Circle *cp = dynamic_cast <Circle*> (sp);
  class Control { ... };
  class TextBox : public Control { ... };
  Control &cr;
  TextBox &ctl = dynamic_cast <Control&> (cr);

② static_cast 不局限于同一多态类层次中的基类和派生类,可使用static_cast调用处于不同层次的类型之间的隐式转换。

例:

class B { ... };
  class D : public B { ... };
  void f(B* pb, D* pd)
  {
      D* pd2 = static_cast<D*>(pb);    // not safe, pb may
                     // point to just B
      B* pb2 = static_cast<B*>(pd);    // safe conversion
      ...
  }

③ reinterpret_cast 将指针类型转换为其他指针类型,将数字转换为指针或将指针转换为数字。

例:

void * getmen()
  {
  static char buf[100];
  …
  return buf;
  }
  …
  char *cp = reinterpret_cast<char *> (getmen);

④const_cast 移去对象的const, volatile, 和 __unaligned属性。

例:

class CCTest
  {
  public: void setNumber( int );
      void printNumber() const;
  private:
      int number;
  };
  void CCTest::setNumber( int num )
  {
  number = num;
  }
  void CCTest::printNumber() const
  {
      cout << "\nBefore: " << number;
      const_cast< CCTest * >( this )->number--;
      cout << "\nAfter: " << number;
  }

时间: 2024-10-05 14:55:26

C++类型转换运算符的使用方法的相关文章

深入解析C++中的动态类型转换与静态类型转换运算符_C 语言

dynamic_cast 运算符将操作数 expression 转换成类型为type-id 的对象. 语法 dynamic_cast < type-id > ( expression ) 备注 type-id 必须是一个指针或引用到以前已定义的类类型的引用或"指向 void 的指针".如果 type-id 是指针,则expression 的类型必须是指针,如果 type-id 是引用,则为左值. 有关静态和动态强制转换之间区别的描述,以及各在什么情况下适合使用,请参见 st

Lua中..和#运算符的使用方法

  这篇文章主要介绍了Lua中..和#运算符的使用方法,是Lua入门学习中的基础知识,需要的朋友可以参考下 通过Lua语言支持其他运算符包括串联和长度. 例子 试试下面的例子就明白了在Lua编程语言提供的其他运算符: 代码如下: a = "Hello " b = "World" print("Concatenation of string a with b is ", a..b ) print("Length of b is "

浅述int与string类型转换的两种方法_java

具体详情如下所示: int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf(i); 这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢? String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法:i=Integer.valueOf(s).intV

java string类型转换boolean类型的方法_java

今天偶然想把string 类型转换成 boolean 类型 ,查了下api文档,发现文档似乎有点不太对经... 嗯,就直接发测试代码吧,废话懒得说了... String s1 = "false"; String s2 = "true"; String s3 = "fAlSe"; String s4 = "TrUe"; String s5 = "true_a"; 以上的string 分别用 Boolean.g

C++运算符重载的方法详细解析_C 语言

运算符重载实质上是函数的重载 重载运算符的函数一般格式如下: 函数类型    operator  运算符名称    (形参表列) {对运算符的重载处理} 例如,想将"+"用于Complex(复数)的加法运算,函数的原型可以是这样的: 复制代码 代码如下: Complex operator + (Complex & c1,Complex &c2); 其中,operator是关键字,时候专门用于定义重载运算符的函数的,运算符名称就是C++提供给用户的预定运算符. 注意:函数

Java instanceof 运算符的使用方法_java

用法: (类型变量 instanceof 类|接口) 作用: instanceof 操作符用于判断前面的对象是否是后面的类,或者其子类.实现类的实例.如果是则返回true 否则就返回false. 注意: · instanceof前面的操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系否则会引发编译错误. 一个简单的例子: 复制代码 代码如下: /** * instanceof 运算符 * @author Administrator * */ public class TestI

详解JavaScript中|单竖杠运算符的使用方法_基础知识

js运算符单竖杠"|"的作用 在js整数操作的时候,相当于去除小数点,parseInt.在正数的时候相当于Math.floor(),负数的时候相当于Math.ceil() 注: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整. 3. Math.round() 我们数学中常用到的四舍五入取整. console.log(0.6|0)//0 console.log(1.1|0)//1 console.log(3.65555|0)//3 console.

JavaScript字符串类型转换成日期类型方法

如果字符串中有空格或是其他分割符分割,可以用split方法先拆分,返回一个数组,再把这 个数组里的年月日作为参数传到new Date()里生成日期类型: 如过没有特殊分隔符,可以用substr(x,y)方法来取子字符串来生成日期,substr(x,y )里,x表示取字串的开始位置,y表示子串的长度! 如果字符串以"/"分割可以用Date.parse(datestr)来转换 <mce:script language="JavaScript"><!--

javascript typeof 运算符的使用方法

返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算符把类型信息当作字符串返回.typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined." typeof