条款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. Data01-数据结构和算法绪论

    Data01-数据结构和算法绪论 一.数据结构和算法绪论 1.1 什么是数据结构? 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科. 程序设计=数据结 ...

  2. Eclipse插件安装常见方法

    Eclipse插件的安装方法大体有以下几种: 第一种:直接复制法 假设Eclipse的安装目录在C:\eclipse,解压下载的eclipse 插件或者安装eclipse 插件到指定目录文件夹,打开安 ...

  3. samrty模板变量操作符

    count_sentences [计算句数],示例:{$smarty.get.name|count_sentences} count_words [计算词数],示例:{$smarty.get.name ...

  4. 发现一个animate的小应用

    <script src="jquery-1.11.1.js"></script> <script> //animate() : //第一个参数 ...

  5. admin 的流程 Xadmin

    提交根评论 显示根评论 --- render显示 --- ajax显示 提交子评论 显示子评论 ---- render显示 ---- Ajax显示(扩展) 评论树 博客:富文本编辑器 beautful ...

  6. angular2.0学习笔记2.创建hello world项目

    1.打开终端命令行窗口 2.切换到指定目录 E:\cd myobject 3.创建新项目 ng new angular2-helloworld 4.创建成功后,在angular2-helloworld ...

  7. iOS.CodeSign

    Inside Code Signing 1. Code Signing需要的基础组件: 证书,私钥 As an iOS developer, chances are you have a certif ...

  8. CButtonST|CUniButton等按钮类的使用

    CButtonST CButtonST类的使用参考链接:http://www.cnblogs.com/lidabo/archive/2012/12/17/2821122.html CCeButtonS ...

  9. rabbitmq安装.教程

    https://www.cnblogs.com/ericli-ericli/p/5902270.html (rabbitmq安装)https://www.cnblogs.com/iiwen/p/538 ...

  10. mysql完装成功后的提示。

    To start mysqld at boot time you have to copysupport-files/mysql.server to the right place for your ...