Site Tools


c_cast

Сравнение объект -> класс с использованием приведения типов

if(ShapePolygon* ptrTest = dynamic_cast<ShapePolygon*>(objShape)){
	OutputDebugString(L"PolygonClass");
}else{
	OutputDebugString(L"Not PolygonClass");
}

источник

class CBase { };
class CDerived: public CBase { };

CBase b; CBase* pb;
CDerived d; CDerived* pd;

pb = dynamic_cast<CBase*>(&d);     // ok: derived-to-base
pd = dynamic_cast<CDerived*>(&b);  // wrong: base-to-derived
  CBase * pba = new CDerived;
  CBase * pbb = new CBase;
  CDerived * pd;

  pd = dynamic_cast<CDerived*>(pba);
  if (pd==0) cout << "Null pointer on first type-cast" << endl;

  pd = dynamic_cast<CDerived*>(pbb);
  if (pd==0) cout << "Null pointer on second type-cast" << endl;

static_cast

Джосьютис 35 > считайте, что он создает временный объект, который затем инициализируется преобразуемыми данными. Разрешено только при наличии определенного преобразования или по умолчанию. Другими словами, ниже приведенные коды, равноправны:

int main(int argc, char *argv[])
{
    double doubleVar = 2.43;
    int intVar = doubleVar;
    cout << intVar << endl;
    return 1;//a.exec();
}

вывод

2




  int main(int argc, char *argv[])
  {
      double doubleVar = 2.43;
      cout << doubleVar << endl;
      cout << static_cast<int>(doubleVar) << endl;
      return 1;//a.exec();
  }

вывод

2.43
2
  

dynamic_cast

единственный способ преобразование на стадии программы, а не компилятора

пример использования приведен в начале страницы

const_cast

создает или отменяет const;

struct type {
      type() :i(3) {}
      void m1(int v) const {
          // this->i = v;                 // compile error: this is a pointer to const
          const_cast<type*>(this)->i = v; // OK
      }
      int i;
  };
  
  const int& intVar = 42;
  
  int main(int argc, char *argv[])
  {
      //// 1
      const_cast<int&>(intVar) = 43;
      cout << intVar << endl;
  
      //// 2
      const int j = 3; // j is declared const
      int* pj = const_cast<int*>(&j);
      *pj = 4;         // undefined behavior!
      
      //// 3
      type t;
      t.m1(4);
      std::cout << "type::i = " << t.i << '\n';
  
  
      void (type::*mfp)(int) const = &type::m1; // pointer to member function
  //  const_cast<void(type::*)(int)>(mfp); // compiler error: const_cast does not
                                           // work on function pointers
      return 1;
  }

вывод

43
type::i = 4

reinterpret_cast

You could leave a comment if you were logged in.
c_cast.txt · Last modified: 2013/04/07 05:32 by konovalov

Page Tools