条款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:避免掩盖集成而来的名称

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

例如:

class class1{
virtual f1();
virtual f1(int x);
} class class2:public class1{
f1();
} class1 * c1 = new class2(); c1->f1();
c1->f1(1);

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

下面的方法可以通过

class class2:public class1{
pubic:
using class1::f1;
f1();
} c1->f1();
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. clickableSpan实现textView文字部分点击有响应

    先定义一个clickableSpan的子类 class MyClickText extends ClickableSpan{ private Context context; public MyCli ...

  2. Couchbase学习和使用

    Couchbase介绍 couchbase的关键有两点:延后写入和松散存储.延后写入,顾名思义,couchbase在对数据进行增删时会先体现在内存中,而不会立刻体现在硬盘上,从内存的修改到硬盘的修改这 ...

  3. mysql 事务中如果有sql语句出错,会导致自动回滚吗?

    事务,我们都知道具有原子性,操作要么全部成功,要么全部失败.但是有可能会造成误解. 我们先准备一张表,来进行测试 CREATE TABLE `name` ( `id` int(11) unsigned ...

  4. java ASM动态生成类

    BeanTest2.java import java.io.FileOutputStream; import org.objectweb.asm.AnnotationVisitor; import o ...

  5. js函数定义和调用

    由于JavaScript的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,而函数名abs可以视为指向该函数的变量. var abs = function (x) { if (x > ...

  6. docker 运行 elasticsearch + kibana

    一.elasticsearch的安装 1.从官网上拉取 elasticsearch 的镜像 docker pull elasticsearch:5.6.11docker images 2.运行容器 m ...

  7. PCR技术

    qRT-PCR是指先由RNA进行反转录生成cDNA,然后以cDNA为模板进行检测,检测的是该cDNA的含量,而cDNA由特定的RNA逆转录而来,所以间接地检测了RNA的含量. 基因表达: 转录:DNA ...

  8. 更好地限制一个UITextField的输入长度

    要限制一个UITextField的输入字数,首先想到的应该是通过 UITextFieldDelegate 的代理方法来限制: - (BOOL)textField:(UITextField *)text ...

  9. centos 6.5 上安装 nvm

    NVM 重磅推出NVM curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash Clos ...

  10. Ubuntu安装R及R包

    安装R $sudo apt-get update $sudo apt-get install r-base $sudo apt-get install r-base-dev 安装一些可能的依赖包 $s ...