========C/C++系列========
文章平均质量分 85
walkerkalr
学无止境,梦想不止
展开
-
effective C++: 5实现
五.实现大多数情况下,适当提出拟的类定义以及函数声明,是花费最多心力的两件事。尽管如此,还是有很多东西需要小心:太快定义变量可能造成效率上的拖延;过度使用转型(casts)可能导致代码变慢又难维护,又招来微妙难解的错误;返回对象“内部数据之号码牌(handls)”可能会破坏封装并留给客户虚吊号码牌;为考虑异常带来的冲击则可能导致资源泄漏和数据败坏;过度热心地inlini原创 2013-12-08 19:41:59 · 978 阅读 · 0 评论 -
effective C++: 6.继承与面向对象设计
六.继承与面向对象设计条款32:确定你的public继承塑模出is-a关系以C++进行面向对象编程,最重要的一个规则是:public inheritance(公有继承)意味is-a(是一种)的关系。在C++领域中,任何函数如果期望获得一个类型为基类的实参(而不管是传指针或是引用),都也愿意接受一个派生类对象(而不管是传指针或是引用)。(只对public继承才成立原创 2013-12-09 20:21:03 · 878 阅读 · 0 评论 -
effective C++: 8.定制new和delete
八、定制new和delete条款49:了解new-handler的行为当 operator new 不能满足一个内存分配请求时,它抛出一个 exception(异常)。很久以前,他返回一个 null pointer(空指针),而一些比较老的编译器还在这样做。你依然能得到以前的行为(在一定程度上),但是我要到这个 Item 的最后再讨论它。在 oper原创 2013-12-12 20:04:10 · 895 阅读 · 0 评论 -
深度探索C++对象模型 1
第一章:关于对象 加上封装后的布局:如果C++class和C struct含有相同数据成员,那么C++class并没有增加成本。因为,C++ class中的成员函数不出现在object中(non-inline 成员函数只会诞生一个实例,而inline函数则会在调用该C++ Class的文件模块中产生一个实例),所以C++支持的封装性质并未带来任何空间或执行期的不良后果。 C++原创 2013-12-23 13:50:58 · 1156 阅读 · 0 评论 -
深度探索C++对象模型:5.构造、析构、拷贝语意学
第五章:构造、析构、拷贝语意学考虑下面这个abstract base class声明:class Abstract_base{public: virtual ~Abstract_base() = 0; virtual void interface() const =0; virtual const char* mumble()原创 2014-01-10 11:36:48 · 1294 阅读 · 0 评论 -
深度探索C++对象模型:4.Function语意学
第四章: Function语意学Nonstatic Member Functions(非静态成员函数)Point3d obj;Point3d *ptr = &obj;Point3d Point3d::normalize() const{ register float mag =magnitude(); Point3d normal; norm原创 2014-01-07 13:27:11 · 1048 阅读 · 0 评论 -
C++ Primer 4-6
C++ Primer第四章:数组和指针vector和数组的区别:数组的长度是固定的,数组一经创建就不允许添加新的元素;如果数组需要更改长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组空间中去。数组不能用另外一个数组初始化,也不能将一个数组赋值给另外一个数组。数组定义中的类型可以是内置数据类型或者类类型;除引用之外,数组元素的类型还可以是任意的复合类型。没原创 2013-12-02 15:48:06 · 728 阅读 · 0 评论 -
C++ Primer 10-12
再读C++ Primer第10章:关联容器关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。关联容器是通过键来高效的查找和读取元素。两个基本的关联容器类型是map和set。map的元素以键-值对的形式组织:键用作元素map中的索引,而值则表示所有存储和读取的数据。set仅包含一个键,并且有效的支持关于原创 2013-12-02 15:44:45 · 703 阅读 · 0 评论 -
effective C++ 1.让自己习惯C++
一.让自己习惯C++条款01:视C++为一个语言联邦为了更好的理解C++,我们将C++分解为四个主要次语言:C:说到底C++仍是以C为基础。区块,语句,预处理器,内置数据类型,数组,指针统统来自C。Object-Oreinted C++:这一部分是面向对象设计之古典守则在C++上的最直接实施。类,封装,继承,多态,virtual函数等等...Template C原创 2013-12-02 15:49:31 · 660 阅读 · 0 评论 -
effective C++: 3资源管理
三.资源管理所谓资源就是,一旦用了它,将来必须还给系统。C++程序中最常使用的资源就好似动态分配内存(如果你new了,却忘了delete,会导致内存泄露),但内存只是你必须管理的众多资源之一。其它常见的有文件描述符(file descriptors)、互斥器(mutex)、图形界面中的字形和画刷。数据库连接以及网络sockets。当你不使用它们时,记得还给系统。条款13:以对象管理原创 2013-12-06 15:41:53 · 769 阅读 · 0 评论 -
C++ Primer 16-18
再读C++ Primer第十六章:模板与泛型编程:模板定义:int compare(const string &v1,const string &v2){if(v1if(v2return 0;}int compare(const double &v1,const double &v2){if(v1if(v2return 0;}定义原创 2013-12-02 15:45:32 · 656 阅读 · 0 评论 -
effective C++: 4.设计与声明
四.设计与声明所谓软件设计,是“令软件做出你希望它做的事情”的步骤和做法,通常以颇为一般性的构想开始,最终变成十足的细节,以允许特殊接口的开发。条款18:让接口容易被正确使用,不易被误用理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,它的作为就该是客户所想要的。欲开发一个“容易被正确使用,不容易被误用”的接口,首原创 2013-12-08 14:37:53 · 898 阅读 · 0 评论 -
effective C++: 7模板与泛型编程
七 模板与泛型编程条款41:了解隐式接口和编译期多态面向对象编程世界总是以显示接口(explicit interface)和运行期多态(runtime polymorphism)解决问题。class Widget{ public: Widget(); virtual ~Widget(); virtual std::size_t s原创 2013-12-12 19:52:30 · 1333 阅读 · 0 评论 -
effective C++: 9.杂项讨论
九、杂项讨论条款52:写了placement new也要写placement delete 许多程序员习惯性地忽略编译器警告.他们任务如果是问题真的很严重的话,编译器就应该给一个错误提示信息而不是警告信息.这种想法看起来似乎很合理,但是在C++语言上,我觉得编译器作者对代码即将会爆发的事情应该比你有更加深入的理解,你说呢?下面我举的这个例子是多多少少在大部人原创 2013-12-12 20:11:36 · 772 阅读 · 0 评论 -
深度探索C++对象模型 2构造函数语意学
第二章 构造函数语意学本章大量出现的英语术语:trivial: 没有用的nontrivial: 有用的memberwise: 对每一个member施以…bitwise: 对每一个bit施以…named return value optimization (NRV) 2.1Default Constructor的构造操作对于一个类,如果没有任何构造函数的声明,那么原创 2014-01-03 15:52:21 · 1183 阅读 · 0 评论 -
深度探索C++对象模型:6.执行期语意学
第6章:执行期语意学想象一下我们有下面这个简单的式子:if(yy ==xx.getValue( ))...其中xx和yy定义为:X xx;Y yy;Class Y定义为:Class Y{Public:Y( );~Y( );Bool operator==(const Y&) const;//...};Class X定义为:Class X{原创 2014-01-11 20:23:58 · 1309 阅读 · 0 评论 -
深度探索C++对象模型 3Data语意学
第三章 Data语意学已知如下程序:#includeusing namespace std;class X{};class Y: public virtual X{};class Z: public virtual X{};class A: public Y,public Z{}; int main(){ cout sizeof(X)原创 2014-01-03 19:00:51 · 1141 阅读 · 0 评论 -
C++ Primer 1-3
再读C++ Primer第一章:快速入门编译器能查出的最常见错误:1、语法错误2、类型错误3、声明错误for和while选择for用于次数已知的情况while用于循环次数未知的情况,但有结束条件文件结束符:windows系统下Ctrl+z,Unix下Ctrl+D第二章:变量和基本类型基本内置类型:c原创 2013-12-02 15:42:35 · 777 阅读 · 0 评论 -
C++ Primer 7-9
再读C++ Primer第7章:函数参数传递:形参的初始化与变量的初始化一样:如果形参具有非引用类型,则复制实参的值;如果形参为引用类型,则它只是实参的别名。非引用形参:普通的非引用类型的参数通过赋值对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。1、指针形参函数的形参可以指针,此时赋值实参指针。原创 2013-12-02 15:44:14 · 674 阅读 · 0 评论 -
C++ Primer 13-15
再读C++ Primer第十三章:复制控制复制构造函数是一种特殊构造函数,具有单个形参,该形参是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。析构函数是构造函数的互补:当对象超出作用域或动态分配的对象被删除时,将自动应用析构函数。析构函数可用于释放对象原创 2013-12-02 15:45:09 · 613 阅读 · 0 评论 -
C++ effective 2.构造/析构/赋值运算
二.构造/析构/赋值运算条款05:了解C++默默编写并调用哪些函数如果你自己美声明,编译器就会为类声明(编译器版本的)一个拷贝构造函数,一个拷贝赋值操作符和一个析构函数。此外如果你没有声明任何构造函数,编译器也会成为你声明一个默认构造函数。所有这些函数都是public且inline。惟有当这些函数被需要(被调用),它们才会被编译器创建出来。即有需求,原创 2013-12-05 16:05:02 · 737 阅读 · 0 评论