基础知识:局部类和嵌套类
局部类 在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。在定义局部类时需要注意:局部类中不能说明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子。 int a; void fun() { static int s; class a { public: void init(int i) { s = i; } }; a m; m.init(10); } 嵌套类 在一个类中...
设计模式的解析和实现(C++)之二十一-完结篇
一个月下来,把常见的20个设计模式好好复习并且逐个用C++实现了一遍,收获还是很大的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白——我深知这个道理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的"知道原理就可以了"……因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者,唯有踏实和实干才能慢慢的掌握到知识。 在我学习设计模式的过程中,觉得造成理解困难的主要是以下几点,谈一下自己的体会,希望对他人有帮助,不要走上我的老路上,毕竟我花了N长的时间才敢号称自...
涅磐重生 C++内存管理变革
引言 C/C++语言的内存管理经历了几次变革,但至今仍未能趋于成熟。这几次变革主要包括: 1. 从malloc/free到new/delete.这场变革是OOP技术兴起的产物。C++是强类型语言,new/delete的主要成果也就是加强了类型观念,减少了强制类型转换的需求。但是从内存管理角度看,这个变革并没有多少的突破性。 2. 从new/delete到内存配置器(allocator)。自从STL被纳入C++标准库后,C++世界产生了巨大的变化。而从内存管理角度来看,allocator的引入也是C++内...
C++ 注册表操作总结
1、RegCloseKey() 原型:RegCloseKey(HKEY hKey) 解释:关闭指定的注册表键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键来进行保存操作结果,关闭一个键后,句柄变为非法,此时应释放句柄。 2、RegCreateKeyEx() 原型:LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired...
Boost Test学习总结(C++)
1.常用的C++单元测试框架 测试驱动开发(TDD)已经是一种非常流行的开发方式了,在Java和。Net中都提供了非常好的单元测试框架,最近研究C++下面的单元测试,发现其实在C++中还是有很多选择: CPPUnit:著名的XUnit系列产品之一,熟悉JUnit、NUnit的开发人员可以很快上手。 CXXTest:需要进行预处理,需要安装Perl或Python. Boost Test:功能强大,提供了自动注册和手动注册两种方式,更重要的是来自千锤百炼的Boost库。 Google Test:Google...
C++调用MATLAB引擎
这是MATLAB自带的例子,我在WindowsXP(SP2), MATLAB R2007b, VC6.0下实现。 具体的步骤是: 1) 设置系统环境变量path,path里面要包括MATLAB的exe, dll那个路径 %MATLAB_PATH%\bin\win32 只要MATLAB是正确安装,它应该会自动配置path环境变量的。 右击我的电脑-属性-高级-环境变量-系统变量 双击path path值应该有以下两个值,中间是分号 d:\MATLABR2007b\bin;d:\MATLABR2007b\b...
嵌入式C++编程准则
A. 代码从C语言到C++语言的移植 A.1 字符常量 注解 在C中,字符常量是int类型,而在C++中,其类型为char. 示例 I = sizeof(‘a’); 在C中,i保存的实际内容是sizeof(int)的计算结果值,该值要比1大。而在C++中,i存储的实际内容是sizeof(char),该值总是为1. 准则 当将C代码移植为C++代码时,所有对字符常量的sizeof有依赖关系的表达式都要被移除。 A.2 文件范围内的对象声明 注解 在C++中,在文件范围内,声明一个没有指定存储类型标志符的对...
C++实例教学-------基础知识
1.1 简单的C++程序 // program 1_1.cpp #includeiostream.h void main() { cout"Let's learn to write a C++ Program."; cin.get(); } 此程序由6行组成, 1)第1行为注释,程序的每行如出现符号" // ",则其右的所有符号为注释。注释是帮助阅读程序的说明,与该程序运行没有关系。在程序被编译时,注释被当作空格处理。此行指出本程序以文件"program 1_1.cpp"存储。 2)第二行#includ...
C++箴言:确保公开继承模拟“is-a”
在 Some Must Watch While Some Must Sleep (W. H. Freeman and Company, 1974) 这本书中,William Dement 讲述了一个他试图让他的学生的记住他的课程中最重要的东西的故事。书中声称,他告诉他的班级,一般的英国中小学生对于 1066 年发生的 Hastings 战争的历史并没有什么了解。他着重强调,如果一个孩子记住了一点儿什么的,他或者她也就是记住了 1066 这个年代。对于上他的课程的学生,Dement 滔滔不绝地讲,其中只有...
闲谈C++算法封装:穷举法
将算法独立抽象出来,在C++中算不上新鲜:STL中就封装了不少高效、健壮、灵活的泛型组件及对应的基础算法,工艺之高、适用性之强,非寻常我辈所轻易能及。这里不打算(也暂没有能力打算)以STL这样的工业级要求来谈论算法封装,只因最近尝翻大师名著,阅者水平有限,仅嗅触至皮毛,理智薄弱,感情却蓬勃发展:也欲尝试“封装”的味道。选择了最简易的穷举算法,抽其骨架,炮制成class...
基础入门:C++中的作用域解析
名字空间域 名字空间主要用于解决名字冲突的问题,在名字空间出现之前,库的作者通常通过附加给库中的类型,全局变量和函数予特定的前缀来防止名字冲突的问题,例如dbus库的Error类型和Error初始化函数被命名为: DBusError dbus_init_error 有了名字空间后,我们就可以通过附加名字空间的名字来构成名字的限定名(QualifiedName)来解决名字冲突的问题。 当然更主要的是我们可以通过名字空间别名,使用声明(特定的名字)和使用指示(全部名字)来达成即能有效防止冲突,又能在已确定的...
基础入门:C++的文件结束符
C++中是通过流的方式来访问文件的,比如说语句ifstreamin("str.txt",ios::in);,就打开了文件str.txt.我们可以通过in.read()来读取流in(也就是文件str.txt)中的数据。现在问题来了:我们怎么判断何时读到了这个文件的末尾呢? 中国自学编程网整理发布 www.zxbc.cn 在C++中,文件的结束标志是EOF——顾名思义,EndOfFile.也就是说,在文件的某个字节b后面加入一个EOF,就表示这个字节b就是该文件的最后一个字节了。这里顺便说一句,EOF占一个...