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

网站添加 百度商桥网页设计外包价格

网站添加 百度商桥,网页设计外包价格,网站开发在线培训,广州网站外包假设有如下继承结构: class Top{}; class Middle: public Top{}; class Bottom: public Middle{};public继承意味着is-a关系,所有的基类都是派生类,但反之则不是,例如所有的学生都是人,但不是所有的人都是学生. 派生类到基类的指针可以直接隐式转换 Top* pt1 new Middle; T…假设有如下继承结构: class Top{}; class Middle: public Top{}; class Bottom: public Middle{};public继承意味着is-a关系,所有的基类都是派生类,但反之则不是,例如所有的学生都是人,但不是所有的人都是学生. 派生类到基类的指针可以直接隐式转换 Top* pt1 new Middle; Top* pt2 new Bottom; const Top* pct2 pt1; Bottom* pb1 new Top; // ERROR,无法向上转型但假设,我们写了一个智能指针类,当此智能指针的模板参数是这些类的时候,如何才能实现上述继承结构下的隐式转换呢? 假设要实现以下功能: templatetypename T class SmartPtr{ public:explicit SmartPtr(T* realPtr):ptr(realptr){...}T* get() const{return ptr;} private:T* ptr;size_t count; };SmartPtrTop pt1 SmartPtrBottom(new Bottom); //直接隐式转换 SmartPtrBottom pb1 SmartPtrTop(new Top); //倒反天罡,拒绝此转换并甩出一个ERROR要知道,如果你不显式的实现此功能,那么SmartPtrTop和SmartPtrBottom只是毫不相干的两个类罢了,当这两个类赋值的时候,肯定不可以直接隐式转换.,分析上面的需求,可以发现,这个功能其实是这样的: SmartPtrTop pt1 SmartPtrBottom(new Bottom); 其实就是 SmartPtrTop pt1(SmartPtrBottom(new Bottom)); 别被这里的号迷惑了,这是调用构造函数而不是调用操作函数 1. 调用SmartPtrBottom(new Bottom)构造函数构造出SmartPtrBottom对象来 2. SmartPtrTop pt1调用拷贝构造函数接受SmartPtrBottom对象,然后构造出SmartPtrTop对象来经过分析,可以发现,关键点在于拷贝构造函数,只要拷贝构造函数能复用编译器关于类型向上/向下,显式/隐式的转换规则,那我们的SmartPtr就可以模拟上面提到的类型转换. 所以可以这样写: templatetypename T class SmartPtr{ public:explicit SmartPtr(T* realPtr):ptr(realptr){...}T* get() const{return ptr;}templatetypename USmartPtr(const SmartPtrU other):ptr(other.get()){// 使用列表初始化直接赋值,也可以在函数体赋值// 当赋值时就会触发编译器的类型转换,并抛出对应的警告或错误,亦或者可以直接赋值或隐式转换....} private:T* ptr;size_t count; };这样就算解决了80%,还有一个坑在这里. 当我们使用了函数模板兼容了所以的类型后,如果模板类型参数T和U的类型相同,例如 SmartPtrint pi1 SmartPtrint(new int);此时两个对象的类型都相同,都是SmartPtrint,注意,模板参数int也是此类型的一部分. 那么编译器有两种选择,一个就是隐式生成默认拷贝构造函数然后调用,二个就是实例化拷贝构造函数模板然后调用,经过实际测试,类型都相同的情况下,编译器(gcc9.4.0)只会调用自己隐式生成的拷贝构造函数,并不会实例化拷贝构造函数模板,所以如果此问题想完美解决,还要手动自定义默认拷贝构造函数,例如std::shared_ptr就有两个拷贝构造函数: 测试Demo: #include iostreamtemplatetypename K class Test{//int rvalue_ref 0; // c11起,右值引用会抑制编译器生成默认构造函数 public:Test(){printf(%s\n,__PRETTY_FUNCTION__);}templatetypename TTest(const TestT other){printf(%s\n,__PRETTY_FUNCTION__);}Test(const Test other){ // 手动定义的拷贝构造函数printf(%s\n,__PRETTY_FUNCTION__);}};int main() {Testint t1 Testdouble();printf(---------------------\n);Testint t2;Testint t3 t2; // 会调用手动定义的拷贝构造函数// 如果无手动定义的拷贝构造函数,则调用编译器定义的拷贝构造函数// 如果抑制生成了编译器的拷贝构造函数,则宁报错也不会实例化拷贝构造函数模板 }
http://www.sczhlp.com/news/186531/

相关文章:

  • 做免费网站推广开头语网站建设请款报告
  • 如何创建外卖网站免费发布网站
  • 宁波网站推广找哪家网站域名注册流程
  • 迈肯奇迹做网站网站建设是一项系统工程
  • 福州网站建设外包做二手货的网站
  • 素材网站建设需要多少费用金融公司 网站开发
  • 百度提交网站地图文字logo设计生成器
  • 网站怎么做才能将名声打响优秀网站要素
  • 温岭市住房和城乡建设局网站自适应网站系统吗
  • 网站域名解析错误怎么办天津市城乡和住房建设厅网站
  • 做传媒网站公司名称营销渠道的选择和营销网络的建设
  • 找人做网站属于了解些什么呢郑州好的妇科医院排行
  • 响应式网站开发流行吗网站建设的现状分析
  • 专业网站设计推荐百度怎么收录我的网站
  • 一级a做爰片免费网站体验网络推广费用预算表
  • 网站怎样添加百度地图网站自适应布局
  • 求个网站你懂我的意思吗闵行区教育学院
  • 怎样找到黄页网站销售型网站建设基本要素
  • 怎么在云主机上做网站网站群建设论文
  • 移动端网站设计规范wordpress 5.0.2企业站主题
  • 251011
  • 视频拍摄技巧 - 希区柯克变焦/滑动变焦 All In One
  • 微网站制作电话国外精彩网站
  • 无锡做网站企业网站建设的作用有哪些
  • 搜索引擎优化seo网站怎样将网站建设后台装到云上
  • 企业如何 建设好自己的网站安徽网站建设信息
  • 无锡中小企业网站建设烟台高新区规划国土建设局网站
  • 做网站 pc端与手机端兼容互联网站安全
  • 上海网站建设招标江苏网站备案要求
  • 网站建设方案对比报告贵阳网站开发招聘