当前位置: 首页 > news >正文

C++ 科目二 [dynamic_cast]

文章目录

  • pre
  • 指针
  • 对象

pre

class Base {
public:virtual void f1(){cout << "Base::f1()" << endl;}virtual void f2(){cout << "Base::f2()" << endl;}
};class Derive : public Base {
public:virtual void f1(){cout << "Derive::f1()" << endl;}virtual void f2(){cout << "Derive::f2()" << endl;}
};

指针

// 当()中的指针指向的是子类空间时,则转型是安全的
Base *pbase1 = new Derive();
Derive *pderive1 = dynamic_cast<Derive *>(pbase1);    // down-cast
pderive1->f1();                                       // Derive::f()
Derive &pderive11 = dynamic_cast<Derive &>(*pbase1);  // down-cast
pderive11.f1();                                       // Derive::f()// 当()中的指针指向的是父类空间时,则转型是不安全的
// 返回值是 nullptr
Base *pbase2 = new Base();
Derive *pderive2 = dynamic_cast<Derive *>(pbase2);  // up-castif (pderive2 != nullptr) {pderive2->f1();pderive2->f2();
} else {cout << "pderive2 == nullptr" << endl;
}// terminate called after throwing an instance of 'std::bad_cast'
Derive &pderive22 = dynamic_cast<Derive &>(*pbase2);  // up-cast
try {pderive22.f1();pderive22.f2();
} catch (exception &e) {cout << "pderive22 == nullptr" << endl;
}delete pbase1;
delete pbase2;

对象

// 当()中的指针指向的是 子类对象时,则转型是安全的
Derive pbase1;
Derive &pderive1 = dynamic_cast<Derive &>(pbase1);  // down-cast
pderive1.f1();                                      // Derive::f()Derive *pderive11 = dynamic_cast<Derive *>(&pbase1);  // down-cast
pderive11->f1();                                      // Derive::f()// 当()中的指针指向的是 父类对象时,则转型是不安全的
// terminate called after throwing an instance of 'std::bad_cast'
Base pbase2;
Derive &pderive2 = dynamic_cast<Derive &>(pbase2);    // up-cast
Derive *pderive22 = dynamic_cast<Derive *>(&pbase2);  // up-cast

http://www.mrgr.cn/news/29089.html

相关文章:

  • 企业开发时,会使用sqlalchedmy来构建数据库 结构吗? 还是说直接写SQL 语句比较多?
  • makefile 的语法(7):函数 word wordlist words firstword lastword ;
  • 一种快速遍历二叉树的方法
  • 构建高效、精准的动物情绪分类模型:基于深度学习的技术实践与探索
  • 认知小文3《打破桎梏,编程与人生的基本法则》
  • 程序中类与对象的理解(面向对象思想)
  • kali——foremost的使用
  • 中秋佳节,月圆人团圆
  • 【数据结构篇】~链表算法题3(环形链表)
  • 【时时三省】linux应用层开发经验总结
  • 【计算机基础】关于存储的各种概念
  • 《沈阳体育学院学报》
  • 【每日一题】LeetCode 2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)
  • 笔记:BLIP源码之(2)模型是如何定义的
  • 机器学习、计算机视觉与NLP:从基础到深度学习的综合指南
  • Android 微信,手机文件管理,通过自己软件打开
  • 网络安全-LD_PRELOAD,请求劫持
  • 【揭秘Java】线程安全中的有序性之谜
  • 线程池夺命十四问
  • 560. 和为 K 的子数组