
C++-Books
cshilin
这个作者很懒,什么都没留下…
展开
-
资源管理
程序编程中,常面临的资源有内存的分配管理,但内存只是你必须管理的众多资源之一。其他常见的资源还包括文件描述器,互斥锁,图形界面中的字型和笔刷,数据库连接,以及网络socket资源。不论哪一种资源,重要的是,当你不再使用它时,必须将它还给系统。 这篇先讲述内存的分配与回收 这是常见的写法,但是若干情况下f可能无法删除它的指针对象,比如过早return,等等情况。单纯依赖”f总是会执行其dele原创 2016-06-23 11:32:36 · 3195 阅读 · 0 评论 -
C++关键字系列
本篇博客会记录重要的C++关键字explicit explicit构造函数是用来防止隐式转换的。如下:class Test1{public: Test1(int n) { num=n; }//普通构造函数private: int num;};class Test2{public: explicit Test2(int n)原创 2016-06-20 09:39:29 · 909 阅读 · 0 评论 -
Part7 模板与泛型编程 Templates and Generic Programming(二)
Rule44: 将与参数无关的代码抽离templates Factor parameter-independent code out of templates 使用Templates可能会导致代码膨胀,其二进制码带着重复或几乎重复的代码,数据或两者。其结果有可能源码看起来合身而整齐,但目标码却不是那么回事。所以需要知道如何避免这样的二进制浮夸。编写templates时,同样是将重复部分抽出来,但原创 2016-07-06 14:16:40 · 1509 阅读 · 0 评论 -
Part7 模板与泛型编程 Templates and Generic Programming
Rule47:请使用traits classes表现类型信息 Use traits classes for information about types.STL 主要由“用以表现容器、迭代器和算法”的templates构成,也覆盖了若干工具性templates,其中一个名为advance,用来将某个迭代器移动某个给定距离。 观念上advance只是做iter+=d动作,但是不可以全然那么做,原创 2016-07-06 23:17:23 · 1945 阅读 · 0 评论 -
Part8:定制new和delete
当计算环境(例如java和.net)夸耀自己内置“垃圾回收能力”的当今,C++对内存管理的纯手工方法看起来老土。但是许多苛刻的系统程序开发人员之所以选择C++,就是因为它允许他们手工管理内存。 这样做的前提是,了解C++内存管理例程的行为。这部分的两个主角是分配例程和归还例程(allocation and deallocation routines,也就是operator new and oper原创 2016-07-07 11:08:02 · 2272 阅读 · 0 评论 -
Rule9:绝不在构造和析构过程中调用Virtual函数
Never call Virtual functions during construction or destruction。 因为在构造函数中调用Virtual函数,会导致继承类不能正常调用其多态函数,因为这个时候先是初始化的基类。原创 2016-06-22 16:07:02 · 2069 阅读 · 0 评论 -
Rule12:复制对象时勿忘其每一个成分
在有继承关系时,复制操作可能会造成此一主题最暗中肆虐的潜藏危机。 PriorityCustomer的copying函数只是复制了PriorityCustomer声明的成员变量,但每个还内含有它所继承的Customer成员变量复件,而那些成员变量却未被复制。因此PriorityCustomer对象的Customer成分会被不带实参之Customer构造函数(即default构造函数)初始化。原创 2016-06-23 10:38:27 · 1411 阅读 · 0 评论 -
转战优快云
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2016-06-17 08:24:55 · 210 阅读 · 0 评论 -
VC++2010开发权威指南
static_assert(expression,message)是编译时期断言,可以用于在编译时期确定的表达式是否正确(expression返回0就是断言错误,需要输出message string信息)auto 新特征是自动识别变量的类型。 map<int,list<string>> m; map<int,list<string>>::iterator i = m.begin()原创 2016-09-03 21:55:11 · 1166 阅读 · 0 评论 -
Part7 模板与泛型编程 Templates and Generic Programming
Rule41: 了解隐式接口和编译期多态 understand implicit interfaces and compile-time polymorphism.面向对象编程总是以显式接口(explicit interfaces)和运行期多态(runtime polymorphism)解决问题。请记住: (1)classes和Template都支持接口和多态 (2)对class而言接口是原创 2016-07-04 17:40:37 · 1466 阅读 · 0 评论 -
STL基础
STL迭代器是以指针为根据塑模出来,所以迭代器的作用像T*。 声明迭代器为const,就像声明指针为const一样(即声明一个T* const指针),标志这个指针不能指向不同的东西,但是所指的东西的值是可以改动的。如果你希望迭代器所指向的东西不可被改动(即希望STL模拟一个const T*指针),你需要的是const_iterator:如下例子:std::vector<int> vec;...c原创 2016-06-20 11:34:41 · 2412 阅读 · 0 评论 -
Part6 继承与OOD Inheritance and Object-Oriented Design(三)
Rule40:明智使用多重继承 Use mutiple inheritance judiciously 最先遇到的一个问题是,当MI进入设计时,程序有可能从一个以上的base classes继承相同名称(如函数、typedef等等),那会导致较多的歧义机会。 上面代码中对checkOut的调用是歧义的,即使两个函数之中只有一个可取用(BorrowwableItem内的checkOut是pub原创 2016-07-04 10:10:25 · 1284 阅读 · 0 评论 -
C/C++ 多线程编程方法
我们在使用C/C++进行多线程编程时,可以使用不同的函数库,比如Windows API 的 CreateThread在对windows窗体进行多线程编程时可以非常方便的使用,还有C++ 11标准的std::thread(function)更能方便的使用,直接支持函数的绑定。但是因为是C++ 11标准,需要使用 VS2012版本以上的编译器才支持。我们主要讲解 pthread这个库方法,这个是Linu原创 2016-06-24 21:43:09 · 1352 阅读 · 0 评论 -
C++ 设计与声明原则
Rule18:让接口容易被正确使用,不易被误用 Make interfaces easy to use correctly and hard to use incorrectly欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。假设你为一个用来表现日期的class设计构造函数: class Date{ public: Date(i原创 2016-06-27 16:20:03 · 1024 阅读 · 0 评论 -
对C#调用C++ dll文件进行总结
对C#调用C++ dll文件进行总结 在实际项目工作中,经常用到C#调用C++ 或者C编写的dll文件。dll支持一般函数声明和类的定义声明,但是一般为了简化,都是 采用函数声明的方式。这里主要并不是写 dll的编写。先在vs中创建一个dll项目添加一个新的cpp文件 测试代码如下:struct Student //定义了一个结构体,结构体中包含了基本类型,字符串类型和数组,基本上能满足很多情原创 2016-06-25 15:22:33 · 1262 阅读 · 0 评论 -
C++编写DLL并使用C++调用
C++编写dll我们之前讲过,这篇文章主要讲解如何在C++环境下调用DLL,并说明C++的回调函数的使用。 C++编写dll,新建console-DLL项目。#include <iostream>using namespace std;extern "C" __declspec(dllexport) int Add(int a, int b,int (*Callback)(int a,int原创 2016-06-29 14:56:44 · 3833 阅读 · 0 评论 -
Part5 实现 Implementations
尽可能延后变量定义式的出现时间 Postpone variable definitions as long as possible. 只要定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并未被使用,仍需耗费这些成本。尽量少做转型动作 Minimize casting 回原创 2016-06-29 13:30:15 · 1730 阅读 · 0 评论 -
(一)函数模板与类模板 Template
1.关键字class和typename这两个关键字都是一样的用法。这与提出的历史有关,先是用的class。最后为了与类class关键字区分开,引入了新的关键字 typename2.申明一个函数模板template<class T>T func(T x,int y){T x;//....} 调用程序代码段可以如下:double d;int a;func(d,a);调用时将使用实参原创 2016-06-17 11:06:52 · 1111 阅读 · 0 评论 -
Part6 继承与OOD Inheritance and Object-Oriented Design(二)
Rule37 :绝不重新定义继承而来的缺省参数值 Never redefine a function’s inherited default parameter value. 由于重新定义一个继承而来的Non-virtual函数永远是错误的,所以可以安全地将本条款的讨论局限于”继承一个带有缺省参数值的Virtual函数”。#include "stdafx.h"#include <iostre原创 2016-07-03 19:54:40 · 1244 阅读 · 0 评论 -
Part6 继承与OOD Inheritance and Object-Oriented Design(一)
确定你的public继承塑模出 is-a关系 这个论点只对public继承才成立,如Student和Person的关系,Student可以以public形式继承Person。而private继承的意义与此完全不同,至于protected继承,作者说“那是一种其意义至今仍然困惑我的东西”。 is-a并非是唯一存在于classes之间的关系,另两个常见的关系是has-a和is-implemented原创 2016-07-02 20:27:24 · 1064 阅读 · 0 评论 -
面试宝典-预处理、const与sizeof
T1.用一个宏定义FIND求一个结构体struc里某个变量相对struc的偏移量。{ int a; char b[20]; double ccc;}则 : FIND(student,a); //等于0 FIND(student,b); //等于4#define FIND(struc,e) (size_t)&(((struc*)0)->e)其中(struc*)0表示将常原创 2016-08-26 14:26:46 · 647 阅读 · 0 评论