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

建网站做日租房什么文案容易上热门

建网站做日租房,什么文案容易上热门,做蔬菜线上的网站,全网最低价自助下单平台粉丝用处: typeid()函数主要用来获取对应类型或者变量的类型信息,其返回一个std::type_info的对象,这个对象中存放了对应类型的具体信息。 所以typeid()函数就是获取一个type_info的类型,然后可以通过此类型来获取到相应的类型信息。 type_info的…

用处:

typeid()函数主要用来获取对应类型或者变量的类型信息,其返回一个std::type_info的对象,这个对象中存放了对应类型的具体信息。

所以typeid()函数就是获取一个type_info的类型,然后可以通过此类型来获取到相应的类型信息。

type_info的声明 

class type_info {
public:virtual ~type_info();bool operator==(const type_info& rhs) const;bool operator!=(const type_info& rhs) const;bool before(const type_info& rhs) const;const char* name() const;private:// 私有构造函数、复制构造函数和赋值运算符,以防止直接创建和复制type_info(const type_info&);type_info& operator=(const type_info&);
};

 这个类中你会发现内部有包含很多关于类型信息的操作函数。
 1. name();  // 可以获取到对应类型信息的名字。

 2. 重载了比较运算符,可以对获取到的类型信息进行比较。

 3. 主要的是,其赋值构造函数和有参构造函数,都设置为了私有的,在别的编译器实现可能会使用=delete删除掉,也就意味着我们没有办法使用type_info类定义对象,所以只有使用typeid才能够获取type_info类型的对象,来获取对应的信息。
 

注意:   type_info类型和typeid的实现是基于编译器的,也就是说c++只是提出了基于语法的层面,对于具体的实现不同的编译器是不一样的,但是用法都是类似的。

typeid的具体使用: 

首先说明,typeid的实现一般是基于虚函数的,当然是我们自己定义的类型,所以建议都使用虚函数。


原因是因为,基于c++的多态,虚函数会保存一个虚函数表的指针,虚函数表中会存储一个type_info的类型信息,但是至于存储在哪个位置,这是由编译器决定的,不同的编译器不一样,我们实际使用的时候没有必要关心。typeid就是借助虚函数表的机制可以判断出多态下父类指针指向的具体实际类型。

具体其实如何得知的,我猜测,应该是当父类的指针指向子类对象实现多态的时候,其对应父类的type_info信息的类型就会修改为其指向的子类类型。(不一定正确)

其实原因就是在多态的实现过程中,可以获取到对应指针指向的实际类型。

 定义一下三个类进行测试:

class People {
public:People() = default;virtual void write() {std::cout << "People\n";}
};class Man : public People {
public:Man() = default;virtual void write() override {std::cout << "Man\n";}
};class Woman : public People {
public:Woman() = default;virtual void write() override {std::cout << "Woman\n";}
};int main(void) {People* p1 = new People;Man* m1 = new Man;People* p2 = m1;    // 使用多态std::cout << typeid(p1).name() << std::endl;  // class People*std::cout << typeid(m1).name() << std::endl;  // class Man*std::cout << typeid(p2).name() << std::endl;  // class People*std::cout << typeid(*p2).name() << std::endl;  // class Manreturn 0;
}

对应的输出结果已经在函数调用之后了,记住typeid函数返回一个type_info类型的对象,但是我们不能使用这样的类型去接收,因为外部不可定义其对象,所以获取type_info类型只有通过typeid,所以获取之后直接使用这个对象。

代码中调用name()获取具体对象的类型。

仔细看最后一个打印信息,p2是一个父类指针对象,所以其类型是父类指针类型,但是*p2则不一样,由于多态的实现,*p2就是p2指针实际指向的类型,此处为Man类型,所以我们使用typeid检测之后得到的就是Man类型的数据。

也可以用于一般类型: 

std::cout << typeid(int) << std::endl;  // int

类型进行比较

if(typeid(int) == typeif(float)){}else{}

 我们可以直接使用==比较两个类型是否相同,相同执行一个分支否则执行另外一个分支,实现运行时类型检查,不同的类型情况进行不用的代码。

dynamic_cast借助typeid进行运行时类型检测 

dynamic_cast是c++新增的类型强制转换,其主要用于继承系列的类型转换,成功返回转换后的指针,失败返回NULL。


其就是根据typeid获取对应的变量的实际类型,然后根据继承树来判断是否可以转换,子类转父类没问题,父类转子类会返回NULL。

http://www.fp688.cn/news/156652.html

相关文章:

  • 为什么做电商网站地推公司
  • 网站建设设计780元全包成人计算机培训机构哪个最好
  • 学完网站建设再可以学什么网络营销和传统营销的区别
  • 做网站业务员怎么样湖北权威的百度推广
  • 做百度推广送的网站怎么在百度打广告
  • 网站落地页如何做企业网站的搜索引擎推广与优化
  • 一级域名 网站建设宁波专业seo外包
  • 大鹏网络网站建设龙华线上推广
  • 纯静态网站怎么做易推广
  • 做网站反链网络营销的概念和含义
  • 网站建设的公司在哪找什么是搜索引擎优化seo
  • 广州网站制作哪家专业郑州怎么优化网站排名靠前
  • 佛山网站建设服务一媒体app软件下载老版本
  • 网站建设实验结论如何做好网络营销
  • 在新西兰做兼职的网站公众号推广合作平台
  • 黄石建网站资源链接搜索引擎
  • 深圳市官网网站建设平台seo公司重庆
  • 小程序微信公众平台seo外链工具
  • 淮南企业网站建设百度客户电话
  • 网站建设实验周志与总结网络营销的基本方式有哪些
  • wordpress主机怎么建站做一个网站要花多少钱
  • 长沙 外贸网站建设百度竞价排名技巧
  • 考试网站怎么做的cpa推广接单平台
  • js网站开发视频教程成人电脑基础培训班
  • 模板网站可以做备案吗百度应用下载安装
  • 重庆转店铺哪个网站平台好软文代写
  • 网站制作公司推荐搜索引擎营销ppt
  • 店铺管理软件网站推广seo是什么
  • 济南做网站的公司哪家好网站seo怎么操作
  • 长沙高新区建设局网站谷歌搜图