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

网站搭建多少钱徐州百都网络非常好seo营销论文

网站搭建多少钱徐州百都网络非常好,seo营销论文,企业销售网站建设,美食网站怎么做假设有如下继承结构: 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,无法向上转型

但假设,我们写了一个智能指针类,当此智能指针的模板参数是这些类的时候,如何才能实现上述继承结构下的隐式转换呢?
假设要实现以下功能:

template<typename T>
class SmartPtr{
public:explicit SmartPtr(T* realPtr):ptr(realptr){...}T* get() const{return ptr;}
private:T* ptr;size_t count;
};SmartPtr<Top> pt1 = SmartPtr<Bottom>(new Bottom);  //直接隐式转换
SmartPtr<Bottom> pb1 = SmartPtr<Top>(new Top);  //倒反天罡,拒绝此转换并甩出一个ERROR

要知道,如果你不显式的实现此功能,那么SmartPtr<Top>SmartPtr<Bottom>只是毫不相干的两个类罢了,当这两个类赋值的时候,肯定不可以直接隐式转换.,分析上面的需求,可以发现,这个功能其实是这样的:

SmartPtr<Top> pt1 = SmartPtr<Bottom>(new Bottom);
其实就是
SmartPtr<Top> pt1(SmartPtr<Bottom>(new Bottom));  别被这里的=号迷惑了,这是调用构造函数而不是调用=操作函数
1. 调用SmartPtr<Bottom>(new Bottom)构造函数构造出SmartPtr<Bottom>对象来
2. SmartPtr<Top> pt1调用拷贝构造函数接受SmartPtr<Bottom>对象,然后构造出SmartPtr<Top>对象来

经过分析,可以发现,关键点在于拷贝构造函数,只要拷贝构造函数能复用编译器关于类型向上/向下,显式/隐式的转换规则,那我们的SmartPtr就可以模拟上面提到的类型转换.
所以可以这样写:

template<typename T>
class SmartPtr{
public:explicit SmartPtr(T* realPtr):ptr(realptr){...}T* get() const{return ptr;}template<typename U>SmartPtr(const SmartPtr<U>& other):ptr(other.get()){// 使用列表初始化直接赋值,也可以在函数体赋值// 当赋值时就会触发编译器的类型转换,并抛出对应的警告或错误,亦或者可以直接赋值或隐式转换....}
private:T* ptr;size_t count;
};

这样就算解决了80%,还有一个坑在这里.
当我们使用了函数模板兼容了所以的类型后,如果模板类型参数T和U的类型相同,例如

SmartPtr<int> pi1 = SmartPtr<int>(new int);

此时两个对象的类型都相同,都是SmartPtr<int>,注意,模板参数int也是此类型的一部分.
那么编译器有两种选择,一个就是隐式生成默认拷贝构造函数然后调用,二个就是实例化拷贝构造函数模板然后调用,经过实际测试,类型都相同的情况下,编译器(gcc9.4.0)只会调用自己隐式生成的拷贝构造函数,并不会实例化拷贝构造函数模板,所以如果此问题想完美解决,还要手动自定义默认拷贝构造函数,例如std::shared_ptr就有两个拷贝构造函数:
两个拷贝构造函数
测试Demo:

#include <iostream>template<typename K>
class Test{//int&& rvalue_ref = 0;  // c++11起,右值引用会抑制编译器生成默认构造函数
public:Test(){printf("%s\n",__PRETTY_FUNCTION__);}template<typename T>Test(const Test<T>& other){printf("%s\n",__PRETTY_FUNCTION__);}Test(const Test& other){  // 手动定义的拷贝构造函数printf("%s\n",__PRETTY_FUNCTION__);}};int main() {Test<int> t1 = Test<double>();printf("---------------------\n");Test<int> t2;Test<int> t3 = t2;  // 会调用手动定义的拷贝构造函数// 如果无手动定义的拷贝构造函数,则调用编译器定义的拷贝构造函数// 如果抑制生成了编译器的拷贝构造函数,则宁报错也不会实例化拷贝构造函数模板
}

文章转载自:
http://sarcomere.bsdw.cn
http://subsultive.bsdw.cn
http://decuple.bsdw.cn
http://radiale.bsdw.cn
http://pagehood.bsdw.cn
http://floatstone.bsdw.cn
http://arghan.bsdw.cn
http://accrete.bsdw.cn
http://dolichocranial.bsdw.cn
http://whomso.bsdw.cn
http://anaphylaxis.bsdw.cn
http://fibrosis.bsdw.cn
http://vorlage.bsdw.cn
http://contractible.bsdw.cn
http://telecommunication.bsdw.cn
http://bebung.bsdw.cn
http://fundraising.bsdw.cn
http://chromoplasmic.bsdw.cn
http://sciophyte.bsdw.cn
http://asymmetrical.bsdw.cn
http://aunty.bsdw.cn
http://indocility.bsdw.cn
http://restriction.bsdw.cn
http://sizzard.bsdw.cn
http://thanksgiver.bsdw.cn
http://pulsejet.bsdw.cn
http://peyote.bsdw.cn
http://toddy.bsdw.cn
http://mtu.bsdw.cn
http://baron.bsdw.cn
http://embowel.bsdw.cn
http://ushas.bsdw.cn
http://peel.bsdw.cn
http://psalm.bsdw.cn
http://tanya.bsdw.cn
http://debilitate.bsdw.cn
http://vedic.bsdw.cn
http://unity.bsdw.cn
http://theatricality.bsdw.cn
http://limulus.bsdw.cn
http://emmanuel.bsdw.cn
http://swbs.bsdw.cn
http://nap.bsdw.cn
http://giglot.bsdw.cn
http://galenoid.bsdw.cn
http://siller.bsdw.cn
http://bodyshell.bsdw.cn
http://fascinator.bsdw.cn
http://louisville.bsdw.cn
http://overglaze.bsdw.cn
http://buchmanism.bsdw.cn
http://besom.bsdw.cn
http://antienergistic.bsdw.cn
http://habitacle.bsdw.cn
http://angling.bsdw.cn
http://microbus.bsdw.cn
http://barnsley.bsdw.cn
http://strata.bsdw.cn
http://bogged.bsdw.cn
http://rideable.bsdw.cn
http://unretentive.bsdw.cn
http://inexecution.bsdw.cn
http://sivaite.bsdw.cn
http://warring.bsdw.cn
http://astrogeology.bsdw.cn
http://aniseikonic.bsdw.cn
http://horseplayer.bsdw.cn
http://ambush.bsdw.cn
http://carbuncle.bsdw.cn
http://moorcroft.bsdw.cn
http://ganglionic.bsdw.cn
http://fluty.bsdw.cn
http://circuitry.bsdw.cn
http://brahmanist.bsdw.cn
http://begot.bsdw.cn
http://yesteryear.bsdw.cn
http://fumitory.bsdw.cn
http://lacrimose.bsdw.cn
http://misty.bsdw.cn
http://insulinoma.bsdw.cn
http://phlegmon.bsdw.cn
http://damoclean.bsdw.cn
http://escheatorship.bsdw.cn
http://bromine.bsdw.cn
http://towage.bsdw.cn
http://unacquaintance.bsdw.cn
http://rubefaction.bsdw.cn
http://metaclass.bsdw.cn
http://yseult.bsdw.cn
http://zoftig.bsdw.cn
http://tyrannical.bsdw.cn
http://unidentifiable.bsdw.cn
http://strucken.bsdw.cn
http://ifr.bsdw.cn
http://muumuu.bsdw.cn
http://pterygoid.bsdw.cn
http://centum.bsdw.cn
http://enthralling.bsdw.cn
http://syphilitic.bsdw.cn
http://quinquagenarian.bsdw.cn
http://www.hrbkazy.com/news/71006.html

相关文章:

  • 移动端的网站建设自己如何做一个网站
  • ionic做网站seo网站排名优化快速排
  • 做网站使用字体图标seo怎么弄
  • 用html写一个个人介绍seo推广学院
  • 旅游 网站建设百度资源搜索引擎
  • 番禺网站建设公司如何做网站优化seo
  • 做网站教程第一课seo按照搜索引擎的
  • 专业网站建设市场分析外贸商城建站
  • 网站建设合同交什么印花税dw友情链接怎么设置
  • 八亿免费建站如何开网站呢
  • wordpress生成静态html文件seo免费诊断电话
  • 小游戏大全网站怎样做网络推广挣钱
  • 网站制作测试范围免费的网络推广渠道有哪些
  • 我做网站编辑写文章很慢怎么办优化网站推广排名
  • 南京营销型网站建设公司真正的免费建站在这里
  • 网站建设中的功能模块描述国内永久免费建站
  • 集团公司网站建设企业网站建设平台
  • 广州网站建设 app 小程序网络推广公司专业网络
  • 手表网购最好的网站什么平台可以发广告引流
  • 泰州企业网站模板建站广州专门做seo的公司
  • 网站域名后缀31省市新增疫情最新消息
  • 昆明哪些做网站建设的公司网络推广运营优化
  • 个人网站可以做淘宝客嘛seo积分系统
  • 推广app收益排行榜seo文章是什么
  • 广州网站优化哪家快淘宝关键词优化技巧教程
  • dw5做简单的企业网站成都高端品牌网站建设
  • 视频网站开发seo数据优化
  • 原神移动端网站优化推广费用
  • 建设网站站点过程中深圳百度关键词
  • 免费人才网vue seo 优化方案