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

西安搬家公司收费价目表2021攀枝花网站怎么做seo

西安搬家公司收费价目表2021,攀枝花网站怎么做seo,朔州网络推广,在线制作图片及图片处理12、虚函数的应用、虚析构函数 运行时类型信息(RTTI)动态类型转换(dynamic_cast)typeid操作符 虚 析构函数空虚析构函数 一个类中#xff0c;除了构造函数和静态成员函数外#xff0c;任何函数都可以被声明为虚函数 运行时类型信息(RTTI) 动态类型转换(dynamic_cast) 用于… 12、虚函数的应用、虚析构函数 运行时类型信息(RTTI)动态类型转换(dynamic_cast)typeid操作符 虚 析构函数空虚析构函数 一个类中除了构造函数和静态成员函数外任何函数都可以被声明为虚函数 运行时类型信息(RTTI) 动态类型转换(dynamic_cast) 用于将基类类型的指针或引用转换为其子类类型的指针或引用前提是子类必须从基类多态继承 (即基类包含至少一个虚函数)动态类型转换会对所需转换的基类指针或引用做检查如果其指向的对象的类型与所要转换的目标类型一致则转换成功否则转换失败。针对指针的动态类型转换以返回空指针(NULL)表示失败针对引用的动态类型转换以抛出bad_cast异常表示失败 // 动态类型转换 基类类型指针转换为子类类型指针 // 基类类型引用转换为子类类型引用 #include iostream using namespace std;class A { // 编译器根据A类信息将制作一张虚函数表 A...|A::foo的地址 public:virtual void foo(){} };class B : public A { // 编译器根据B类信息将制作一张虚函数表 B...|A::foo的地址 };class C : public B { // 编译器根据C类信息将制作一张虚函数表 C...|A::foo的地址 };class D {}; // 编译器根据D类信息不制作虚函数表int main( void ){B b; // |虚表指针| -- 编译器根据B类信息制作的虚函数表A* pa b; // B* -- A* (子类类型指针 -- 基类类型指针)cout ---------------------dynamic_cast 运行期间做的转换----------------------- endl; B* pb dynamic_castB*(pa); // pa--b对象所占内存空间--虚表指针 -- 编译器根据B类信息制作的虚函数表-Bcout A* pa -- B* pb: pb endl;C* pc dynamic_castC*(pa); // pa--b对象所占内存空间--虚表指针 -- 编译器根据B类信息制作的虚函数表-Bcout A* pa -- C* pc: pc endl;D* pd dynamic_castD*(pa); // pa--b对象所占内存空间--虚表指针 -- 编译器根据B类信息制作的虚函数表-Bcout A* pa -- D* pd: pd endl;cout ---------------------static_cast 编译期间做的转换----------------------- endl; pb static_castB*(pa); // 即合理且安全 A* --B*的反向 可以隐式转换cout A* pa -- B* pb: pb endl;pc static_castC*(pa); // 有风险 A*--C*的反向 可以隐式转换cout A* pa -- C* pc: pc endl;// pd static_castD*(pa); // 不合理 A*--D*的反向 不可以隐式转换 // cout A* pa -- D* pd: pd endl;return 0; } typeid操作符 #include typeinfo返回type info类型对象的常引用 type info类的成员函数name()返回类型名字符串type info类支持“”和“!”操作符可直接用于类型相同与否的判断 当其作用于基类类型的指针或引用的目标对象时 若基类不包含虚函数 typeid所返回类型信息由该指针或引用本身的类型决定若基类包含至少一个虚函数即存在多态继承typeid所返回类型信息由该指针或引用的实际目标对象的类型决定 // typeid操作符 -- 获取对象的类型信息 // 无法获取对象常属性信息 #include iostream #include typeinfo using namespace std;class A { // 编译器根据A类信息将制作一张虚函数表 A...|A::foo的地址 virtual void foo(){} };class B : public A { // 编译器根据B类信息将制作一张虚函数表 B...|A::foo的地址 };int main( void ){B b;// |虚表指针| -- 编译器根据B类信息制作的虚函数表A* pa b;A ra b;cout pa指针的目标对象的类型 typeid(*pa).name() endl;// pa-b对象所占内存空间--虚表指针--B类虚函数表--Bcout ra引用的目标对象的类型 typeid(ra).name() endl;// ra-b对象所占内存空间--虚表指针--B类虚函数表--Bint m;const type_info rty typeid(m);// 1. 获取m的类型信息(类名、类大小、类版本...)// 2. 创建一个type_info类对象// 3. 将获取到的m的类型信息保存到type_info对象的私有成员变量中// 4. 返回type_info类对象的常引用string rn rty.name();cout m的类型 rn endl;const int n 10;cout n的类型 typeid(n).name() endl;cout (typeid(m) typeid(n)) endl;cout (typeid(m)!typeid(n)) endl;return 0; } 虚 析构函数 delete一个基类指针 (指向子类对象 实际被调用的仅仅是基类的析构函数 基类的析构函数只负责析构子类对象中的基类子对象 基类的析构函数不会调用子类的析构函数 在子类中分配的资源将无法得到释放 如果将基类的析构函数声明为虚函数那么实际被调用的将是子类的析构函数 子类的析构函数将首先释放子类对象自己的成员然后再调用基类的析构函数释放该子类对象的基类部分最终实现完美的资源释放 // 虚析构函数 -- delete一个基类类型指针(指向子类对象),能够正确的调用子类的析构函数 #include iostream #include fcntl.h #include unistd.h using namespace std;class A{ public:A():m_a(open(./file,O_CREAT | O_RDWR, 0644)){//【int m_a open(..);】定义m_a,初值为文件描述符 --文件表等内核信息(动态资源)cout A()被调用 -- 打开file文件 endl;}virtual ~A(){ // 虚析构函数close(m_a);cout ~A()被调用 -- 关闭file文件 endl;// 释放m_a本身所占内存空间} private:int m_a; }; class B : public A{ public:B():m_b(open(./cfg,O_CREAT | O_RDWR, 0644)){//【A();】定义基类子对象利用基类子对象.A()//【int m_b open(...);】定义m_b,初值为文件描述符--文件表等内核信息(动态资源)cout B()被调用 -- 打开cfg文件 endl;}~B(){ // 虚析构函数close(m_b);cout ~B()被调用 -- 关闭cfg文件 endl;// 对于基类子对象利用基类子对象.~A()// 释放m_b/基类子对象本身所占内存空间} private:int m_b; };int main( void ){A* p new B; // 定义B堆对象利用B类堆对象.B()delete p; // p-析构函数(~B()) 释放B类堆对象本身所占内存空间return 0; } 空虚析构函数 没有分配任何动态资源的类无需定义析构函数没有定义析构函数的类编译器会为其提供一个缺省析构函数但缺省析构函数并不是虚函数为了保证delete一个指向子类对象的基类指针时能够正确调用子类的析构函数就必须把基类的析构函数定义为虚函数即使它是一个空函数任何时候为基类定义一个虚析构函数总是无害的 一个类中除了构造函数和静态成员函数外任何函数都可以被声明为虚函数
http://wiki.neutronadmin.com/news/288279/

相关文章:

  • 谎称在网站网站做维护如何帮公司做网站
  • 自己做网站需要学什么可以做英语阅读理解的网站
  • 自建站多少钱推广网店店铺
  • 东莞如何编写网站建设编程网站入口
  • 青岛做网站建设的公司排名浙江网站建设公司
  • 重庆网站建设及优化专业做卖菜的网站
  • 网站建设网络推广方案ppt福田公司总部
  • 门户网站建设自查整改报告网站建设添加视频
  • 安微网站建设动画设计招聘信息
  • 东莞市住房和城乡建设局门户网站漳州市建设局网站6
  • 常州网站建设公司好么学编程去哪里学比较好
  • 北京网站域名备案山东舜玉建设工程有限公司网站
  • 建设网站技术人员先进事迹怎么制作自己的小程序
  • 做网站空wordpress去index.php
  • 深圳网站开发技术国外做家居类的网站
  • 怎样上传自己做的网站正邦的网站建设
  • 做二手车那个网站会员性价比高wordpress打卡签到领红包
  • 靖江网站建设制作网站首页设计教程
  • 冶金工业建设工程定额总站网站国外seo比较好的博客网站
  • 大型网站系统架构汽车行业网站建设比较
  • 工商局网站官网网站建设宣传ppt模板下载
  • 一家专门做瓷砖特卖的网站室内平面图在线制作网站
  • 做那种事的网站html源码大全
  • 做网站的一般多钱2020新闻热点事件素材
  • 做个购物网站多少钱wordpress登录可见
  • 如何在建设银行网站查验回单陶瓷网站建设中企动力
  • 旅游网站案例分析市场代理招商信息
  • 学做分类网站公司网页设计html
  • seo网站推广的主要目的包括建设论坛网站
  • 网站公司做网站修改会收费吗重庆市建设工程信息网联系电话