dynamic

    技术2026-10-05  1

    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; }  }

    最新回复(0)