Effective C++ 随笔(5)
条款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)的更多相关文章
- Effective C++ 随笔(4)
条款21:必须返回对象时,别妄想返回其reference 例子: Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为 const Rational&am ...
- Effective C++ 随笔(3)
条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ...
- Effective C++ 随笔(2)
条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...
- Effective C++ 随笔(1)
条款一 c++ 为一个语言联邦 1.四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针 面向对象的C++:封装,多态,继承 Template C++ STL 条款二 尽量以const ...
- Effective Modern C++翻译(1):序言
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ...
- 小王子浅读Effective javascript(一)了解javascript版本
哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ...
- Linux随笔-鸟哥Linux基础篇学习总结(全)
Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
随机推荐
- day 30 HTML
HTML: 超文本标记语言(Hyper Text Markup Language) Html基本结构 <!DOCTYPE html> <html> <!-- 定义HTML ...
- cgi fast-cgi php-fpm区别
php-cli 是php在系统执行的程序,直接执行php文件: cgi和fast-cgi的区别1.cgi和fast-cgi都是php解析协议,负责解析服务器分发过来的php动态文件:cgi程序就会去解 ...
- cell设置背景颜色为啥不起作用
利用poi设置背景颜色时,应如下配置, CellStyle cell=workbook.createCellStyle(); cell.setFillForegroundColor(IndexedCo ...
- mysql中left join设置条件在on与where时的区别
一.首先我们准备两张表来进行测试. CREATE TABLE `a` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID', `na ...
- jar导入本地maven库
最近在了解视频监控相关sdk,海康威视官方sdk要求自己手工将fas-data-sdk-1.0-SNAPSHOT.jar导入本地maven库,maven配置文件pom.xml配置如下 <?xml ...
- 关于sublime Text 3安装sublimecodeIntel插件配置方法
打开preferences-package settings-sublimecodeIntel-settings users 添加 { "JavaScript": { " ...
- Android.Tools.Ant
ant 1. ant手册翻译 ant手册翻译是一项大工程!!!!!! ant在线手册的链接好不明确. 2. ant 支持for循环 安装ant-contrib Ref[1.1]. 要在ant的buil ...
- 20172306《Java程序设计与数据结构》第八周学习总结
20172306<Java程序设计>第8周学习总结 教材学习内容总结 第十章最开始自己看的时候,没怎么看懂,等老师讲完之后,又看了一遍,就理解了很多.第十章主要学习了以下几点: 1.对于几 ...
- Servlet会话管理一(URL重写和表单隐藏域)
会话可以简单的理解为客户端用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器的整个过程称为一个会话.即一个客户端用户和服务器端进行通讯的过程,也是客户端和服务器端之间的数据传 ...
- JSONObject 的使用学习
http://www.cnblogs.com/hitwtx/articles/2468633.html put与accumulate,element方法的区别什么? http://blog.csdn. ...