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

专门做房产的网站各大免费推广网站

专门做房产的网站,各大免费推广网站,企业官网网站,新网网站空间到期停了 咋续费条款18#xff1a;让接口容易被正确使用#xff0c;不易误使用 使用外覆类型#xff08;wrapper#xff09;提醒调用者传参错误检查#xff0c;将参数的附加条件限制在类型本身 Data::Data(int month, int day, int year) { ... }三个参数类型相同的函数容易造成误用 Da…条款18让接口容易被正确使用不易误使用 使用外覆类型wrapper提醒调用者传参错误检查将参数的附加条件限制在类型本身 Data::Data(int month, int day, int year) { ... }三个参数类型相同的函数容易造成误用 Date d1(29, 5, 2014); //调用顺序错乱应该是 5, 29, 2014Date d2(2, 30, 2014); //传入参数有误2月没有30号导入新的类型 struct Month {explicit Month(int mValue):Value(mValue){}int Value; };struct Day {explicit Day(int mValue):Value(mValue){}int Value; };struct Year {explicit Year(int mValue):Value(mValue){}int Value; };Date d2(2, 30, 2014); //error,类型错误 Date d3(Day(30), Month(2), Year(2014)); //error,类型错误 Date d4(Month(2), Day(30), Year(2014)); // 正确限制取值 struct Month {enum E_MON{JAN 1, FEC, MAR, APR, MAY, JUN, JUL, AGU, SEP, OCT, NOV, DEC};explicit Month(const E_MON month) : m_month(month) {} private:int m_month; };从语法层面限制调用者不能做的事 operate*的返回类型上加上const修饰防止无意的错误赋值if (a * b c)接口应表现出与内置类型的一致性 如自定义容器的接口在命名上和STL应具备一致性或者两个对象相乘最好重载operator*而不是设计名为”multiply”的成员函数。从语法层面限制调用者必须做的事 如条款13在获取资源时返回的是原始指针如果客户忘记使用智能指针进行管理呢最好的做法是令获取资源的接口直接返回智能指针。 对象在动态连接程序库DLL被 new 创建却在另一个 DLL 内被另一个delete销毁。shared_ptr 保证对象会使用原来所在单元的 delete因此 std::shared_ptrInvestment createInvestment(){std::shared_ptrInvestment retVal(static_castInvertment*(0), getRidofInvestment)//因为0不是指针需要强转//getRidofInvestment函数作为删除器retVal ...; //令retVal指向正确对象return retVal; }如果被pInv管理的原始指针可以在建立pInv之前确定下来将其传给pInv的构造函数会比先将pInv初始化为null再赋值为佳原因条款26 条款19设计class犹如设计type 新 type 对象应该如何被创建和销毁 类中构造函数、析构函数、内存分配和释放函数operator newoperator new[]operator deleteoperator delete[]操作符的重构需求。对象的初始化和赋值该有什么样的差别 构造函数和赋值操作符的区别重点在资源管理上新 type 的对象如果被按值传递意味着什么 拷贝构造函数的实现什么是新 type 的合法值 类中的成员函数必须对类中成员变量的值进行检查如果不合法就要尽快解决或明确地抛出异常。决定了你的 class 必须维护的约束条件在语法层面、至少在编译前应对用户做出监督你的新 type 需要配合某个继承图系吗 类是否受到基类设计地束缚是否拥有该覆写的虚函数是否允许被继承若不想要被继承应该声明为final你的新 type 需要什么样的转换 新类型和已有类型之间的隐式转换问题类型转换函数和非explicit函数之间的取舍编写类型转换函数 operator xxx()或者显式编写转换函数。条款15什么样的操作符和函数对此 type 而言是合理的 影响到你将为你的类声明哪些函数和重载哪些运算符什么样的标准函数应该被驳回 什么样的标准函数应该被驳回条款6谁该取用新 type 的成员 类中哪些成员设为 publicprivate 或 protected以及友元类和友元函数的设置什么是新 type 的“未声明接口” 为未声明接口提供效率、异常安全性以及资源运用上的保证并在实现代码中加上相应的约束条件。你的新 type 有多么一般化 如果需要定义一类 types应该定义一个新的 class template。你真的需要一个新 type 吗 如果只是定义新的 derived class 以便为既有的 base class 添加功能说不定单纯定义一个或多个 non-member 函数或者 templates更能达到目标 条款20宁以 pass-by-reference-to-const 替换 pass-by-value c函数默认传值 函数接口应该以const引用的形式传参而不应该是按值传参。 传值涉及大量参数的复制这些副本大多是没有必要的 按引用传参也可以避免对象切片(Object slicing) 的问题 (对于多态而言将父类设计成按值传参如果传入的是子类对象仅会对子类对象的父类部分进行拷贝即部分拷贝而所有属于子类的特性将被丢弃造成不可预知的错误同时虚函数也不会被调用) 小的类型并不意味着按值传参的成本就会小。类型大小与编译器的类型和版本有很大关系某些类型在特定编译器上编译结果会比其他编译器大得多。小的类型也无法保证在日后始终很小。 只有内置类型以及STL的选代器和函数对象传值更合适 条款 21必须返回对象时别妄想返回其引用 绝不要返回pointer或reference指向一个local stack对象局部变量在函数结束时就销毁了 或返回reference指向一个heap-allocated对象额外控制delete可能出错 w x * y * z; //重载了operator*如果引用指向的是堆内存会内存泄漏或返回 pointer或 reference指向一个local static对象而有可能同时需要多个这样的对象 对于C11以上的编译器可以采用给类型编写“转移构造函数”以及使用std::move()函数更加优雅地消除由于拷贝造成的时间和空间的浪费。 条款4已经为“在单线程环境中合理返回reference指向一个local static对象”提供了一份设计实例。(单例模式) 条款22将成员变量声明为private 请对class内所有成员变量声明为privateprivate意味着对变量的封装。 从语法一致性看所有的变量都是private那么所有的public和protected成员都是函数了用户在使用的时候也就无需区分 所有类的使用者想利用私有变量实现自己的业务功能时就必须通过我们留出的接口这样的接口便充当了一层缓冲将类型内部的升级和改动尽可能的对客户不可见——不可见就是不会产生影响 protected 并不比public更具封装性 public、protected和private三者反应的是类设计者对类成员封装特性的不同思路——对成员封装还是不封装如果不封装是对第一类客户不封装还是对第二类客户不封装。 条款23宁以non-member, non-friend替换member函数 class WebBrowser { // 一个浏览器类 public:void clearCache(); // 清理缓存直接接触私有成员void clearHistory(); // 清理历史记录直接接触私有成员void clearCookies(); // 清理cookies直接接触私有成员void clearBrowser(); // 在内部调用上边三个函数不直接接触私有成员应该放在类外 }无需直接访问private成员而只是若干public函数集成而来的member函数。本条款告诉我们这些函数应该尽可能放到类外。 关于类的封装性封装的作用是尽可能减小被封装成员的改变对类外代码的影响。某成员封装的好坏看类内有多少public或protected函数直接访问到了这个成员这样的函数越多该成员的封装性就越差——该成员的改动对类外代码的影响就可能越大。对于上述clearBrowser函数设计者本意是不应直接访问任何私有成员只是公有成员的简单集成(没有必要让其也拥有访问类中private成员的能力)以最大程度维护封装性。但在类的未来维护中可能忘记设定在此函数中添加对私有成员的直接访问 成员函数不仅可以访问private成员变量也可以取用private函数、enums、typedefs等等。而非成员非友元函数能实现更大的封装性因为它只能访问public函数 关于包括弹性和机能扩展性提取至类外通过不同的工具类或者namespace来明确责任可以从更多维度组织代码结构并优化编译依赖关系。当我们使用不同功能时就可以include不同的头文件而不用在面对cache的需求时不可避免的将cookies的工具函数包含进来降低编译依存性。这也是namespace可以跨文件带来的好处。 命名空间可以跨越多个源码文件而类则不可以。 //在C中比较自然的做法是让clearBrowser()函数成为一个non-member函数并且位于WebBrowser类所在的同一个命名空间(namespace)中。 namespace WebBrowserStuff { class WebBrowser { //核心机能public :void clearCache();void clearHistory();void clearCookies();};// non-member函数提供几乎所有客户都需要的核心机能void clearBrowser(WebBrowser wb) {wb.clearCache();wb.clearHistory();wb.clearCookies();} }一个像WebBrowser这样的类中可能有大量的便利函数如书签便利函数、打印便利函数、cookies管理有关的便利函数.为了防止多个便利函数之间发生编译相互依赖性分离它们的最直接方法是将书签便利函数声明在一个头文件中将cookies管理有关的便利函数声明在另一个头文件中再将打印便利函数声明于第三个头文件中 // 头文件webbrowser.h这个头文件针对WebBrowser类 namespace WebBrowserStuff{class WebBrowser{// ...};// ... non-member函数 } // 头文件webbrowserbookmarks.h namespace WebBrowserStuff{// ... 与书签相关的便利函数 } // 头文件webbrowsercookies.h namespace WebBrowserStuff{// ... 与cookies管理相关的便利函数 }本条款讨论的是那些不直接接触私有成员的函数如果你的public(或protected)函数必须直接访问私有成员那请忘掉这个条款 条款24若所有参数皆需类型转换请为此采用non-member函数 这个条款告诉了我们操作符重载被重载为成员函数和非成员函数的区别 如果一个操作符是成员函数那么它的第一个操作数即调用对象不会发生隐式类型转换。 如果你需要为某个函数的所有参数包括被this指针所指的那个隐喻参数第一个操作数即调用对象进行类型转换那么这个函数必须是个non-member。 class Rational { public:Rational(int numerator 0, int denominator 1);... }; Rational oneHalf(1, 2); result oneHalf * 2; // 正确 result 2 * oneHalf; // 报错等价于 result oneHalf.operator*(2); // 正确 result 2.operator*(oneHalf); // 报错应放在类外 const Rational operator*(const Rational lhs, Rational rhs){return Rational(lhs.numerator() * rhs.numerator(),lhs.denominator() * rhs.denominator());}条款25考虑写出一个不抛异常的swap函数 std::swap函数在 C11 后改为了用std::move实现因此几乎已经没有性能的缺陷 原文的思想 当std::swap对你的类型效率不高时提供一个swap成员函数这个成员函数不抛出异常只对内置类型进行操作如果提供一个member swap也该提供一个non-member swap来调用前者对于普通类也请特化std::swap调用swap时区分是调用自身命名空间的swap还是std的swap不能乱加std::符号为“用户自定义类型”进行std template全特化是好的但千万不要尝试在std内加入某些对std而言全新的东西。 函数匹配优先级普通函数 特化函数 模板函数
http://www.sczhlp.com/news/245390/

相关文章:

  • 安庆市城乡建设网站临沂百度网站建设
  • 桂林市自来水公司网站网页编程语言有哪几种
  • 中牟建设工程信息网站成都有什么互联网公司
  • 南昌商城网站建设公司男人和女人做哪个网站
  • 免费手机网页网站网络游戏代练
  • 黑龙江建设网官方网站特种作业证网络服务类型及其网络协议
  • 网站建设小组的运营模式虚拟主机 删除网站缓存
  • 小白也能看懂的RL-PPO
  • 顶级CTF工具与资源大全
  • 新学期每日总结(第17天)
  • 南京重庆网站建设黑网站代码制作
  • 企业网站和信息化建设制度公司 网站源码
  • 厦门网站建设价格asp+access网站开发实例精讲
  • 免费个人建站系统网站建设公司不给ftp
  • h5网站开发哪个好安徽平台网站建设设计
  • 网站怎么做导航栏做我的世界头像的网站
  • 网站做seo需要大量文章网页制作模板的作用
  • 做yahoo代拍网站公司微信小程序免费模板平台
  • 做的网站在ie会乱码wordpress vps 伪静态
  • wordpress修改字体为微软成都网站建设seo
  • 易网 网站建设移动互联网开发的学习心得
  • 长春网站怎么推广校园失物招领网站建设
  • 舞台灯光网站建设南昌seo推广方式
  • 南戴河区网站建设哪家好克拉玛依市建设局网站
  • thinkphp网站开发服务网页设计与制作课程评价内实
  • 网站连接跳转怎么做windows wordpress伪静态
  • 襄樊网站建设安徽工程信息网人员查询
  • 桐庐建设局网站私人搭建服务器
  • 微信营销网站建设企业做的网站推广费用如何记账
  • 做网站外包好做吗网站的网站地图怎么做