条款27:尽量稍作转型动作

const_cast:常量性移除

dynamic_cast:安全向下转型

reinterpret_cast:

static_cast:

如在子类当中享调用父类当中的某个方法,尝试使用转型方式,将其转换为父类的方式是不对的

static_cast<fclass>(*this).function();

function执行的是在一个临时对象上,而不是当前对象的父类上。如要调用父类方法,需使用下属方式 fclass::function();

条款30:透彻理解inlining的里里外外

正确声明inline函数的方法是在其定义式前面加上inline

inline函数无法随着程序库的升级而升级,一旦程序库设计者将inline函数改变,则客户程序需要重新编译, 但是如果是非inline函数则不会有这个问题,若使用动态链接的方式则更容易解决

条款31:将文件件的编译已存关系降至最低

在头文件当中使用声明的方式引入需要使用的类,需要引进的类的头文件在源文件当中include,从而,当外部类发生变化时,include文件当中的声明并没有变化, 因此不会引起不必要的重新编译;在定义当中同样应该使用指针挥着引用,因为两者的大小不变,当他们所代表的类型发生变化时,也不会引起他们的重新编译

条款33:避免掩盖集成而来的名称

在子类当中定义重新定义的和父类中同名的函数会覆盖父类中所有的同名函数,及时参数不同

例如:

  1. class class1{
  2. virtual f1();
  3. virtual f1(int x);
  4. }
  5.  
  6. class class2:public class1{
  7. f1();
  8. }
  9.  
  10. class1 * c1 = new class2();
  11.  
  12. c1->f1();
  13. c1->f1(1);

会出错,因为f1(int)已经被掩盖

下面的方法可以通过

  1. class class2:public class1{
  2. pubic:
  3. using class1::f1;
  4. f1();
  5. }
  6.  
  7. c1->f1();
  8. c1->f1(1);

这时是没有问题的

条款35:考虑virtual函数之外的其他选择

将virtual函数变为private从而,对其进行的继承子类都会无法看到里面的细节,调用使用一个在父类当中设定的一个非virtual 函数

这样就类似于在父类设定了一个template,而在子类当中对这些template要调用的方法进行了定义

条款37:绝不重新定义继承而来的缺省参数

virtual 函数系动态绑定,而缺省参数值却是静态绑定的

Effective C++ 随笔(5)的更多相关文章

  1. Effective C++ 随笔(4)

    条款21:必须返回对象时,别妄想返回其reference 例子: Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为 const Rational&am ...

  2. Effective C++ 随笔(3)

    条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ...

  3. Effective C++ 随笔(2)

    条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...

  4. Effective C++ 随笔(1)

    条款一 c++ 为一个语言联邦 1.四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针 面向对象的C++:封装,多态,继承 Template C++ STL 条款二 尽量以const ...

  5. Effective Modern C++翻译(1):序言

    /*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ...

  6. 小王子浅读Effective javascript(一)了解javascript版本

    哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ...

  7. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  8. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  9. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

随机推荐

  1. 设置导航栏和TabBar标题的文字格式

    //TabBar样式 [navi.tabBarItem setTitleTextAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSiz ...

  2. 通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明

    启动Tomcat时报错,通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明,报错如下 1.从报错可以看到找不到元素   tx:annotation-driven ...

  3. Linux下Python2升级Python3

    Linux下Python2的升级方法: 一.下载Python3安装包: 1.在线下载 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2 ...

  4. go语言中net包tcp socket的使用

    一.通过socket我们模拟请求网易 package main; import ( "net" "log" "io/ioutil" &quo ...

  5. vue2.0跨域携带cookie和IE兼容

    /*vue-resource为了跨域获取到cookie做的操作*/ 1vue-resource跨域问题Vue.http.interceptors.push(function(request, next ...

  6. mysql主备配置

    目录 mysql主备2 一.master配置:2 1. 修改配置文件 2 2. 登录添加账号并赋权限 2 3. 查看master信息 2 二.slave配置:2 1. 修改配置文件 2 2. 重启登录 ...

  7. vs 调试 IE显示“无法显示该网页

    在用VS2010调试网站的时候,突然页面不能正常显示了,IE显示“无法显示该网页”.症状一: IE地址栏里面显示的端口号和桌面任务栏右下角“ASP.NET Development Server”的端口 ...

  8. andorid 全部对话框

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  9. hdu 4717(三分) The Moving Points

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 n个点,给出初始坐标和移动的速度和移动的方向,求在哪一时刻任意两点之间的距离的最大值的最小. 对于最 ...

  10. EL(表达式语言)

    EL表达式的主要作用 1)获取数据.EL使得获取JavaBean中的数据变得非常简单,也可以替换JSP页面中的脚本元素,从各种类型的web域中获取数据. 2)执行运算.利用EL表达式可以在JSP页面中 ...