dynamic_const的用法

来源:互联网 发布:省市区sql脚本 编辑:程序博客网 时间:2024/06/01 10:01

dynamic_const的语法形式如下:
dynamic_const<T> (expression)
dynamic_const的用途是将expression的类型转换为T。
在上面的语法形式中,T代表一个类型,它必须是以下三种类型之一:
类的指针类型
类的引用类型
void*
那么相应的,expression也必须是类的指针或者是类的引用。注意不能是void*,否则会出现编译错误。
从上面的描述可知,dynamic_const操作的对象都是关乎类的,它不能作用在C++中的内置对象(比如int)上。
而且对类还有一个特殊的要求,就是类必须要有虚函数。如果T所相关的类没有虚函数,则会出现编译错误。
dynamic_const的返回值有两种:
1 返回expression的值。在以下几种情况下会返回这个值。
  ①如果expression指向的对象的类型是A,并且T关乎的那个类是A的基类。
  ②T为void*

  ③如果expression指向的对象确实能转换为类型T。(比如确实指向一个T类型的对象)
2 返回NULL。
  不满足上述1的情况就会返回NULL。
下面是一个dynamic_const的例子:
#include <iostream>
using namespace std;

class A
{
 private:
  int a;
 public:
  virtual void print(){
   cout<<"A class"<<endl;
  }
};

class B : public A
{
 private:
  int b;
 public:
  virtual void print(){
   cout<<"B class"<<endl;
  }
};

class C : public A
{
 private:
  int c;
 public:
  virtual void print(){
   cout<<"C class"<<endl;
  }
};

int main(){

 A* pa = new B();
 B * pb = new B();
 A * pb2 = dynamic_cast<A*>(pb);
 C * pb3 = dynamic_cast<C*>(pb);

 B *pa2 = dynamic_cast<B*>(pa);//OK
 void * pb4 = dynamic_cast<void*>(pb);
 if(pb2){//不为NULL
  cout<<"pb2 is not null"<<endl;
  pb2->print();
 }
 
 if(pb3){ //为NULL
  pb3->print();
  cout<<"pb3 is not null"<<endl;
 }
 
 if(pb4){ //不为NULL
  cout<<"pb4 is not null"<<endl;
 }  
}

原创粉丝点击