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

天津网站优化实战专业制作标书

天津网站优化实战,专业制作标书,怎么给网站做外链,设备外贸用哪个网站来源#xff1a;http://www.cnblogs.com/qiaozhoulin/p/5227673.html “如何产生一个不能被继承的类”#xff0c;这道题我反反复复只想到#xff0c;将父类的构造函数私有#xff0c;让子类不能调用#xff0c;最后归结出一个单例模式#xff0c;但面试官说#xff0c;…来源http://www.cnblogs.com/qiaozhoulin/p/5227673.html “如何产生一个不能被继承的类”这道题我反反复复只想到将父类的构造函数私有让子类不能调用最后归结出一个单例模式但面试官说单例模式作为此题的解答不够灵活后来面试官提示说可以用友元虚继承可以完美实现这样一个类 当然那时我还不太明白友元与虚继承我都极少接触过只是知道有这些东西回头搜了一下“不能被继承的类”的做法具体如下 1声明一个类CNoHeritance构造函数为private并声明友元类CParent 2让CParent虚继承CNoHeritance 这样CParent就成为一个可以被正常实例化但又不能被继承的类 吴总当时评价说“呵呵虚继承感觉完全是黑科技啊” 这个黑科技真是戳中我笑点但想到C经常有些奇妙的东西现在想总结一下 1C构造函数的黑科技 对于阅读过进阶C书籍的都该知道编译器会在“需要”的时候那么什么是需要的时候呢四种情况 1“带有Default Constructor”的Member Class Object2“带有Default Constructor”的Base Class3“带有至少一个Virtual Function”的Class4“带有一个Virtual Base Class”的Class 自动合成的构造函数往往都是public在派生类中它的构造函数是可以被使用的即派生类不会因此受到限制。 那么如何能使派生类不能使用基类的函数或成员呢 private只能由1该类中的函数2其友元函数访问protected可以被1该类中的函数2其友元函数3派生类子类的函数访问public可以被1该类中的函数2其友元函数3子类的函数4该类的对象访问 如果一个类的构造函数声明为private则其派生类甚至该类的对象都不能访问意味着两点 1该类不能被继承2该类不能由系统实例化即它实例化的对象不会在栈内存上 那么怎么使用该类呢一般而言会通过该类的函数来创建class A { private:A(){} public:A createA(){A* pnew A();return *p;} }; 然而这样又引申一个问题类没有实例化如何能使用其成员函数呢 答案是将该成员函数声明为static这样不需要实例化即可访问即将上述改为class A { private:A(){} public:static A createA(){A* pnew A();return *p;} };A ObjectA::createA(); 很明显上面的实例化过程很不方便简直是艰辛呀单例模式的其中一种实现就是如此在此先不讲。这样实现的类不能被继承但自己也不好过 so如果用友元来实现是怎么实现的呢 声明一个类及其友元class A { private:A(){}friend class B; }; 那么B是可以调用A的private的构造函数的那么让B虚继承A会发生什么事呢 由《深度探索C对象模型》看到B内存中将有一份A类的实体调用A的构造函数构造的这对于友元类B是可行的class A { private:A(){}friend class B; };class B : virtual A { }; 那么这样的B能不能被继承呢假设有个类继承了B如下class A { private:A(){}friend class B; };class B : virtual A { };class C : B { }; 考虑到虚继承的特性C也将调用A的构造函数构造出一个A但C并不是A的友元类所以根本不能执行A私有的构造函数这段程序如果不实例化C编译器不会报错但一旦实例化C则将报错。 而B是可以正常实例化的一个类这样就完美实现了一个不能被继承的类B 2C构造函数初始化列表的黑科技 相比于构造函数的各种trickC的初始化列表就显得很容易了只有那么一点要注意 C的初始化列表的赋值顺序是与C类里面成员变量的声明顺序相关与初始化列表里的顺序无关 举个例子以下就会出现莫名错误class A { public:A(int _x, int _y):y(_y), x(y){} public:int x;int y; }; 根据声明顺序在初始化列表中是先完成x(y)这个步骤但此时y并没有被赋值所以得到的x是个随机的值。 3C虚函数的黑科技 C虚函数的问题几乎是面试必问实际上需要了解的东西也挺多我自己在前几次面试都有些理解有误的地方或者理解不够完善 这里总结几点吧以下类都是针对有虚函数的类 1每个类都有虚函数表这个虚函数表是在编译阶段构建在代码段产生一个vtbl2每次实例化的时候构造函数在前几个字节产生一个指向虚函数表的指针指向代码段的那个虚函数表3虚函数的实现与调整是通过移动或变换虚函数表的指针来实现的。4纯虚函数是指只声明但未被实现的虚函数具有纯虚函数的类不能被实例化为抽象类 4C拷贝构造函数的黑科技 C的拷贝构造函数是C默认的四个函数之一构造函数、析构函数、赋值函数、拷贝构造函数 拷贝构造函数是一种特别的构造函数在《深度探索C对象模型》书中说有三种情况会导致拷贝构造函数被触发 1以一个object的内容作为另一个class object的初始值 class X {...} X x; X xxx; 2当object被当作参数传递给某个函数时 void foo(X x); X xx; foo(xx); 3函数传回一个class object的时候 X foo_bar() {X xx;// ...return xx; } 一般情况下如果没有提供explicit copy constructor时会发生什么呢 一个良好的编译器可以为大部分class objects产生bitwise copies因为它们有bitwise semantics... 这里说的很神奇好像我们不需要自己写copy constructor也没问题一样实际上bitwise copies在有些情况下是非常不推崇的 首先解释下什么是bitwise copies这是指在拷贝过来的时候把class的内存直接位拷贝过来即可以看成是内存拷贝对应的有值拷贝 位拷贝有很多问题典型的一个如果class里面含有分配内存的指针那么它会将指针指向的地址直接拷贝过来class A { public:int *p; };int main() {A a1;a1.pnew int[10];A a2a1;cout a1.p endl;cout a2.p endl;return 0; } 这里可以发现a1.p的地址与a2.p的地址是一样的那么我分配的内存该由哪个释放呢我释放了另一个怎么办呢 实际上这种拷贝方式在STL的string里面肯定是要重写的不能用位拷贝。 《深度探索C对象模型》中说class不展现出“bitwise copy semantics”有四种情况 1当class含有member object并且后者有一个copy constructor声明或合成2当class继承一个base class 而后者存在一个copy constructor的时候3当class声明了一个或多个virtual functions时4当class派生自一个继承串链其中有一个或多个virtual base classes时 其实主要都是担心指针在bitwise semantics下随便复制可能会导致不可预料的错误 在这里说一下赋值函数与拷贝构造函数在触发上的区别 当一个object从无到有时触发的一定是拷贝构造函数赋值函数只会在已有的object赋值时才会触发 5C虚继承的黑科技 针对虚继承可以坦承的一点就是 所有简单的东西遇到虚继承似乎都要单独拿出来讨论
http://www.pierceye.com/news/507118/

相关文章:

  • 有免费的微网站制作吗瑞安哪里有培训做网站的
  • 苏州住房和城乡建设局网站wordpress中文书
  • 盐城市滨海县建设局网站wordpress 4.8.1 漏洞
  • 荆州市城市建设投资开发有限公司网站百度人工服务24小时
  • 永久域名购买昆明网站建设优化企业
  • 自适应网站模板下载网页设计培训哪好
  • 做门窗网站便宜的vps租用网站
  • 龙岗附近公司做网站建设多少钱公司行业类型有哪些
  • 188旅游网站管理系统源码做外贸有那些网站平台
  • 江苏网站建设要多少钱近三个月以来的国际新闻
  • 旬阳做网站免费漫画软件
  • asp相册网站源码企业网站建设的上市公司
  • 做网站和软件哪个挣钱国家企业信用信息公示系统山西
  • 做网站前的准备什么二建证考试需要什么条件
  • 男女做a视频网站asp单页网站源码
  • 手机页面网站模板怎么卖做淘宝保健品药品在哪个网站找素材
  • 青县建设银行网站百度投广告怎么收费
  • 广州天河做网站河南建筑工程信息网官网
  • 展示型网站怎么做响应式网站导航栏内容
  • 建设实验教学网站的作用电脑前端主要做什么
  • 搭建租号网的网站网站收录了没有排名
  • 商城网站前期准备seo优化能提高网站的流量吗
  • 时间轴网站代码免费的wordpress
  • 合肥网站推广公司制作微信的网站有哪些
  • 低价网站建设方案网站做框架
  • 企业网站建设平台的分析网站建设产品
  • 企业app定制开发设计方案win10系统优化
  • 网站开发需要逻辑吗线下编程课程收费标准
  • 网站的费用多少wordpress替换js为外部引用
  • 工业设备网站源码国家图书馆网站建设介绍