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++随笔 ...
随机推荐
- python脚本删除文件与目录的命令
1. 删除文件的命令 import os os.remove(file) os.unlink(file) 2.删除目录的命令 import shutil shutil.rmtree(directory ...
- ubuntu下sudo apt-get update Sources 404 Not Found 解决方法
刚安装了ubuntu之后的主要安装命令无非就是apt-get install了,然而很多都在这里就夭折了. 使用apt-get install ***需要先执行apt-get update 加载文件包 ...
- 37-Arrays.sort() 由大到小排序 和 对象数组排序
1. 由大到小排序: 2. 对象数组排序: 1. 由大到小排序: 注意:必需是Integer 类型的数组!!! 方法一: import java.util.Arrays; import java.ut ...
- Android沉浸式状态栏背景色以及字体颜色的修改
在activity中设置透明状态栏 的思路: 1.让activity的布局全屏 此时布局会和状态栏重叠 2.让布局最上方预留出和状态栏高度一样的高度,将状态栏的背景色设置为透明 效 ...
- Java_反射_范型
虽然从来没有被面过,但是必须知道,因为classForname classloader被面过多次了. 一.Class.forName动态加载 1.编译时加载类是静态加载类, ...
- golang xml和json的解析与生成
golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析. package main; import ( "encoding/xml" " ...
- django分页的东西, 不详细, 但是也足够了。
视图函数中的代码 from django.shortcuts import render, HttpResponse, redirect import json from django.core.pa ...
- 如何调用别人提供的API?
1:一般使用聚合数据提供的API: 百度聚合数据,进入: 2:一般是有用户名的直接登录,没有用户名的先进行注册.在搜索框中输入你想查找的API方面的关键字:例如:有关健康的 点开任意一个,你将会看到: ...
- 1.3 Java中的标识符和关键字
1.标识符 含义:标识符用于给程序中的类.变量.方法命名的符号. 组成:数字(0-9).字母(a-z)(A-Z).下划线(_).美元符号$. 命名规则:1.数字不能够作为命名符号的开头 2.不能够使用 ...
- windows无法停止 服务 错误1053 服务没有及时响应
windows无法停止 服务 错误1053 服务没有及时响应 服务程序.exe -st