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

青海网站开发建设做商城网站服务器配置怎么选择

青海网站开发建设,做商城网站服务器配置怎么选择,微信网站的结构,我想做卖鱼苗网站怎样做RTTI RTTI是什么 RTTI是运行阶段类型识别,通过运行时类型识别,程序能够使用基类的指针或者引用来检查这些指针或者引用所指向的对象的实际派生类型。 RTTI的三个元素 dynamic_cast运算符 dynamic_cast概念: dynamic_cast运算符能够将基…

RTTI

RTTI是什么

RTTI是运行阶段类型识别,通过运行时类型识别,程序能够使用基类的指针或者引用来检查这些指针或者引用所指向的对象的实际派生类型。

RTTI的三个元素

dynamic_cast运算符

dynamic_cast概念:

dynamic_cast运算符能够将基类+的指针或引用安全的转换成派生类的指针或者引用

dynamic_cast语法:

dynam_cast<Type*>(pt);

dynamic_cast案例演示:

假设定义了如下类

#include<iostream>using std::cout;
using std::endl;class A
{
public:virtual void func1() { cout << "这是A的func1函数" << endl; }virtual void func2() { cout << "这是A的func2函数"; }
};
class B : public A
{
public:virtual void func1() { cout << "这是B的func1函数" << endl; }virtual void func2() { cout << "这是B的func2函数"; }void func3() { cout << "B的func3函数"; }
};
class C : public A
{
public:virtual void func1() { cout << "这是C的func1函数" << endl; }virtual void func2() { cout << "这是C的func2函数"; }
};

 如何通过基类指针调用派生类的成员函数呢?

int main()
{A* p_a = new B;p_a->func3();return 0;
}

 这样调用会直接报错,因为A类中没有func3函数,要使用B类方法必须要将指针转换成B类指针才可以

	B* p_b = (B*)p_a; //c风格的强制类型转换,可能会导致错误p_b->func3()

 强制类型转换可以将指针进行转换,但无法指出转换的安全性与合适性:就好别人传来一个指针,你需要确定这个是否为你想要转换的类型,这时使用dynamic_cast就非常有必要

B* p_b1 = dynamic_cast<B*>(p_a); // p_a指向的是B类型的对象,所以可以转换成功
if(p_b1 != nullptr) cout << "p_a实际是一个B类型" << endl;
else cout << "p_a不是B类型,转换失败" << endl;

对于引用类型转换失败,会报出一个异常,std::bad_cast。

A* pa_0 = new B;
A & pa_1 = * pa_0
try
{B & pb_0 = dynamic_cast< B& >(pa_1);cout << "pa_0 是B对象的引用 " << endl;
}
catch(std:bad_cast)
{cout << " pa_1 不是对象B的引用 " << endl;
}

typeid运算符

typeid运算符概念:

typeid运算符:拿到对象信息typeid就会返回一个常量对象的引用,这个常量对像是一个标准库类型type_info(类/类型)

typeid用法:

typeid(类名),typeid(结果为对象的表达式),typeid 常用于确定两个对象是否是同一类型。

案例演示

A* pa1 = new B;
B* pa2 = new B;if(typeid(pa1) == typeid(pa2)) cout << "yes" << endl;
else cout << "no" << endl;

 注意不要把typeid用来识别指针,这样他只是识别定义时的类型,应该传递对象。

A* pa1 = new B;
B* pa2 = new B;if(typeid(*pa1) == typeid(*pa2)) cout << "yes" << endl;
else cout << "no" << endl;

 在这里可以使用等号的原因是,type_info类重载了==和!=运算符,所以可以使用这些运算符来进行类型的比较

typeid().name()将返回实际类型

char a;
int b;
A * pa = new B;cout << typeid(*pa).name() << endl; // 返回class B
cout << typeid(a).name() << endl; // 返回char
cout << typeid(b).name() << endl; // 返回int
http://www.15wanjia.com/news/178334.html

相关文章:

  • 房地产建设网站上海比较有名的公司
  • 建筑设计地图网站给个网站带颜色
  • 企业网站建设的费用微信网站页面
  • 云南电商网站开发wordpress关注作者
  • 电商网站建设注意事项企业营销的网站
  • 做网站为什么一定要去国外网站如何做微信支付宝支付
  • 做网站襄樊西宁专业网站建设
  • 手机上网站用建设工具如何做外贸品牌网站建设
  • 关于建设网站的情况说明书海口网站建设q479185700棒
  • 制作公司网站的中国科技成就手抄报
  • 西南大学校园网站建设往年考试卷手机网站安全证书过期怎么处理
  • 网站开发前景怎么样wordpress博客类主题
  • asp响应式h5网站源码下载目录浏览的网站
  • 做网站客源wordpress可以做手机网
  • 做网站不给源码吗网站开发 知乎
  • 去哪里找做网站的人c2c平台怎么下载
  • 做软件的中介网站深圳宝安国际会展中心
  • 设计一套企业网站多少钱自助建站h5
  • 建站平台一键申请三方支付通道浙江质监站网址
  • 怎么做一个手机网站wordpress 主题 数据
  • 网站建设经济效益网站商城首页怎么做吸引人
  • 商业网站页面做展示型企业网站
  • 南昌商城网站设计WordPress更换主题残留
  • 个人网站如何提高访问量线上推广的方式有哪些
  • 铜川做网站室内设计效果图软件手机版
  • 网站尾部设计重庆招聘网官方网站
  • wordpress获取QQseo排名查询工具
  • 2013电子商务网站建设考试图片点开是网站怎么做
  • 辽宁专业模板网站建设公司网站建设合同属于技术服务合同吗
  • php网站开发要学什么软件零食天堂 专做零食推荐的网站