代码改变世界

随笔分类 -  C++

《Effective C++》条款14 总是让base class拥有virtual destructor

2014-05-10 22:25 by youxin, 391 阅读, 收藏, 编辑
摘要: 有时,一个类想跟踪它有多少个对象存在。一个简单的方法是创建一个静态类成员来统计对象的个数。这个成员被初始化为0,在构造函数里加1,析构函数里减1。(条款m26里说明了如何把这种方法封装起来以便很容易地添加到任何类中,“my article on counting objects”提供了对这个技术的另... 阅读全文

《Effective C++》内存管理

2014-05-09 16:30 by youxin, 378 阅读, 收藏, 编辑
摘要: 如果global new-hander没有成功配置,会抛出一个std::bad_alloc的exception。#include#include#includeusing namespace std;templateclass NewHandlerSupport{public: static ... 阅读全文

c++类型转换Type Cast)

2014-05-09 00:53 by youxin, 1358 阅读, 收藏, 编辑
摘要: C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const或volatile属性。static_cast,命名上理解是静态类型转换。如... 阅读全文

C++中的new/delete与operator new/operator delete

2014-04-27 18:01 by youxin, 362 阅读, 收藏, 编辑
摘要: new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。 new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载 operator new( 阅读全文

内存管理(memory allocation内存分配)

2014-04-27 03:01 by youxin, 2787 阅读, 收藏, 编辑
摘要: Memory managementis the act of managingcomputer memory. The essential requirement of memory management is to provide ways to dynamically allocate port... 阅读全文

内存碎片

2014-04-27 02:25 by youxin, 1200 阅读, 收藏, 编辑
摘要: 内存碎片分为:内部碎片和外部碎片【内部碎片】内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存... 阅读全文

Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同

2014-04-26 20:01 by youxin, 609 阅读, 收藏, 编辑
摘要: 类成员的默认初始化顺序是按照声明顺序进行, 如果使用初始化列表初始化成员变量, 则必须按照成员变量的声明顺序进行;否则, 在变量之间交替赋值时, 会产生, 未初始化的变量去赋值其他变量;同时GCC, 也会发出警告, 如:'class::m_xxx' will be initialized after... 阅读全文

c++ explicit

2014-04-26 15:44 by youxin, 699 阅读, 收藏, 编辑
摘要: C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:classMyCla... 阅读全文

linux eclipse c++配置

2014-04-23 00:49 by youxin, 512 阅读, 收藏, 编辑
摘要: 安装cdt:https://www.eclipse.org/cdt/downloads.php新建一个c++工程,运行发生错误:EclipseCDTlaunchfailed.Binarynotfound解决方案配置完成后建立工程测试,发现建立Hello World c++ Project类型的项目后... 阅读全文

c++ smart pointer

2014-04-17 09:41 by youxin, 676 阅读, 收藏, 编辑
摘要: 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。... 阅读全文

c++ ifstream ofstream 文件流

2013-11-12 11:11 by youxin, 1318 阅读, 收藏, 编辑
摘要: #include ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中fstream //读写操作,对打开的文件可进行读写操作 打开文件:voidopen(constchar*filename,ios_base::openmodemode=ios_base::in|ios_base::out); 或ifstream if("data.txt"); 默认构造函数和open原型一样。本文件的读写类ofstream, ifstream 和fstream 是分别从ostream, istream 和... 阅读全文

STL set 使用小结

2013-11-08 11:59 by youxin, 8081 阅读, 收藏, 编辑
摘要: 这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类,每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系,并且当游标指向一个已删除的元素时,删除操作无效。”而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定 阅读全文

统计英文单词的出现次数

2013-11-08 11:32 by youxin, 898 阅读, 收藏, 编辑
摘要: map 对象的元素是键值对(key,value),每个key对应一个value, map默认中按key定义的“ ::key_type;value 是一个非const对象,其类型为map::mapped_type;访问map可以用迭代器访问也可以用下标访问: 1、用迭代器访问:map::iterator iter = m.begin();...... 这时候对迭代器解引用会得到map容器中一个map::value_type 类型的值,对于map容器来说该值是pair类型,再标准库中pair在utility中声明,pair first 为const 对象保存key;second为非cons... 阅读全文

C++利用指针突破私有成员访问限制

2013-11-08 11:30 by youxin, 1787 阅读, 收藏, 编辑
摘要: C++ 面向对象的一大特性就是封装,使用不同的访问控制符来控制外接对其的访问权限。比如:1 class A2 {3 public:4 A(): i(10){}5 void print(){ cout using namespace std;class A{ public: A(): i(10){} void print(){ cout void Func(const T &t) {} const int GetValue() { return m_nPrivate; }};这... 阅读全文

编程之美-快速寻找满足条件的2 个数

2013-10-13 23:17 by youxin, 832 阅读, 收藏, 编辑
摘要: 能否快速找出一个数组中的两个数字,让这个两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定至少存在一组满足要求的解。作者给出了3种方案:[方案一]穷举法:从数组任意取出两个数字,计算两者之和是否为给定的数字。时间复杂度O(N^2),效率较低。[方案二]将问题变通为一个查找问题:求两个数之和,假定为sum。对于数组中的每个数array[i],判断sum-array[i]是否在数组中。在一个无序数组中查找一个数的复杂度是O(N),对于每个数字都要进行相应的查找,则时间复杂度仍为O(N^2)。为了提高效率,可以相对数组进行排序,然后利用二分查找算法,时间复杂度为O(NlogN)。[方 阅读全文

C++箴言:避免构造或析构函数中调用虚函数

2013-10-03 02:21 by youxin, 474 阅读, 收藏, 编辑
摘要: 如果你已经从另外一种语言如C#或者Java转向了C++,你会觉得,避免在类的构造函数或者析构函数中调用虚函数这一原则有点违背直觉。但是在C++中,违反这个原则会给你带来难以预料的后果和无尽的烦恼。 正文 我想以重复本文的主题开篇:不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C++与其它语言的大区别之一。 假设你有一个为股票交易建模的类层次结构,例如买单,卖单,等等。为该类交易建立审计系统是非常重要的,这样的话,每当创建一个交易对象,在审计登录项上就生成一个适当的... 阅读全文

程序员面试题精选100题(32)-不能被继承的类

2013-10-03 02:04 by youxin, 456 阅读, 收藏, 编辑
摘要: 题目:用C++设计一个不能被继承的类。分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字,要实现这个要求还是需要花... 阅读全文

为何要将整型变量强制转化为指针

2013-10-02 15:30 by youxin, 4747 阅读, 收藏, 编辑
摘要: 为何要将整型变量强制转化为指针这个标题包含二层含义:1、整型变量能强制转化为指针吗?例如下面的形式:DWORD ia=10;LPVOID lp = (LPVOID) ia;我们在程序中测试一下吧#include #include using namespace std;void main(){DWORD ia =10;//定义了一个整形变量LPVOID lp =(LPVOID)ia;//强制转化成指针cout #include using namespace std;void main(){DWORD ia =10;//定义了一个整形变量LPVOID lp =(LPVOID) &ia; 阅读全文

转:C++中多态是怎样实现的?

2013-09-12 16:08 by youxin, 826 阅读, 收藏, 编辑
摘要: 多态是一种不同的对象以单独的方式作用于相同消息的能力,这个概念是从自然语言中引进的。例如,动词“关闭”应用到不同的事务上其意思是不同的。关门,关闭银行账号或关闭一个程序的窗口都是不同的行为;其实际的意义取决于该动作所作用的对象。大多数面向对象语言的多态特性都仅以虚拟函数的形式来实现,但C++除了一般... 阅读全文

如何定义和实现一个类的成员函数为回调函数

2013-09-06 19:39 by youxin, 1457 阅读, 收藏, 编辑
摘要: 回调函数,就是由你自己写的,你需要调用另外一个函数,而这个函数的其中一个参数,就是你的这个回调函数名。这样,系统在必要的时候,就会调用你写的回调函数,这样你就可以在回调函数里完成你要做的事。 B.如何定义和实现一个类的成员函数为回调函数 要定义和实现一个类的成员函数为回调函数需要做三件事: a.声明; b.定义; c.设置触发条件,就是在你的函数中把你的回调函数名作为一个参数,以便系统调用 如: 声明回调函数类型 typedef void (*FunPtr)(void); 定义回调函数 class A { public: static void callBackFun... 阅读全文
上一页 1 2 3 4 5 6 7 8 ··· 11 下一页