文章分类 -  C++

摘要:第一部分:(参考百度百科)一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,... 阅读全文
posted @ 2015-03-13 10:40 jeffkuang 阅读(101) 评论(0) 推荐(0)
摘要:#.string 建议 使用string 的方便性就不用再说了,这里要重点强调的是string的安全性。 string并不是万能的,如果你在一个大工程中需要频繁处理字符串,而且有可能是多线程,那么你一定要慎重(当然,在多线程下你使用任何STL容器都要慎重)。 string的实现和效率并不一定是你... 阅读全文
posted @ 2015-03-12 11:55 jeffkuang 阅读(133) 评论(0) 推荐(0)
摘要:生成文件命名规则:boost中有许多库,有的库需要编译、而有的库不需要编译,只需包含头文件就可以使用。编译生成的文件名字普遍较长,同一个库根据编译链接选项不同,又可以生成多个不同名字的文件。生成的文件名字是很长,可是这样带的信息才多,也就容易识别出用途。其实生成文件的名字遵循一定的规则,有着固定的格... 阅读全文
posted @ 2015-03-11 22:24 jeffkuang 阅读(186) 评论(0) 推荐(0)
摘要:1)首先下载源代码,解压到某个目录,我解压到了D盘根目录:D:\3rdParty\src\boost_1_57_0(2)生成bjam.exe可执行文件用VS2010命令行,进入到到目录D:\3rdParty\src\boost_1_57_0,运行booststrap.bat这时在目录D:\3rdPa... 阅读全文
posted @ 2015-03-11 18:23 jeffkuang 阅读(242) 评论(0) 推荐(0)
摘要:索引目录传统转换方式及用户自定义转换const_castreinterpret_caststatic_castdynamic_cast再谈为何会有那四个转换运算符看起来,我应该把导师讲过、遗漏的有关C++类型转换方面的内容都总结成文了,主要内容都在以上几篇文章中阐述完毕。上边的每一篇文章,虽然都单独着重强调一种转换方式或运算符,但是也有提到跟其他运算符之间的差异性,以及使用建议,因此基本可以看出各个运算符的使用方式和作用。在文章也看到const_cast, reinterpret_cast, static_cast都可以用传统的转换方式基于指针进行替代。如果结合typeid运算符,那么dyna 阅读全文
posted @ 2012-12-12 11:45 jeffkuang 阅读(112) 评论(0) 推荐(0)
摘要:dynamic_cast <new_type> (expression)dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代。但是也因此它是最常用,最不可缺少的一个运算符。与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系。 更准确的说,dynamic_cast是用来检查两者是否有继承关系。因此该运算符实际上只接受基于类对象的指针和引用的类转换。从这个方面来看,似乎dynamic_cast又和re 阅读全文
posted @ 2012-12-12 11:43 jeffkuang 阅读(109) 评论(0) 推荐(0)
摘要:static_cast <new_type> (expression)虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在方法中定义一个static变量,该变量在程序开始存在直到程序结束;类中定义一个static成员,该成员随类的第一个对象出现时出现,并且可以被该类的所有对象所使用。对static限定的改变必然会造成范围性的影响,而const限定的只是变量或 阅读全文
posted @ 2012-12-12 11:42 jeffkuang 阅读(104) 评论(0) 推荐(0)
摘要:前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:const_cast <new_type> (expression)static_cast <new_type> (expression)reinterpret_cast <new_typ 阅读全文
posted @ 2012-12-12 11:41 jeffkuang 阅读(102) 评论(0) 推荐(0)
摘要:在计算机语言中,类型的存在让我们可以更有针对性的进行数据和功能的处理,但是却又存在了类型转化的问题。C++如同其他计算机语言一样,也同样都 这些问题。不过它相对于C而言多了引用类型(Reference);相对与C#来讲,又多了指针类型(Point)。这似乎让它的类型转化变得更加扑朔迷 离。也许是C方面知识的延续,我对C++的基础类型之间的转换还算比较清楚的,但是由于C#的Convert这个类库是那么的好用,以至于我一直不太适应C++的转换方式。不过经过导师的教授,发现C++的也可以构建禇类似Convert的转换方式。在导师经过一堂课关于C++类型转换的课后,我又在网上查阅相关资料,以便更清晰详 阅读全文
posted @ 2012-12-12 10:52 jeffkuang 阅读(181) 评论(0) 推荐(0)
摘要:在《C++的头文件和实现文件分别写什么》文章中,我对于的C++的数据成员,逐个分析了可以作用在它们上边的限定符都有哪些,以及它们所对应的进行初始化的位置。可以看出这些修饰符其实就是const和static的两种的组合,但是却有不同的效用。本文,我想讲关于static的问题,《C++的头文件和实现文件分别写什么》已经指出如果数据成员被声明为static,那么它在编译时就必须被初始化。仅含static的则放在类之外,实现文件之中;同时含有的const的则放在类之内,直接跟在数据的定义之后。在我实际代码编写中碰到的问题是:static成员的初始化比较的复杂,步骤较多,需要调用另一个函数来完成。此时, 阅读全文
posted @ 2012-12-12 10:48 jeffkuang 阅读(244) 评论(0) 推荐(0)
摘要:在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。对于以C起步,C#作为“母语”的我刚开始跟着导师学 习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中 (其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package理解以及.h文件 和.cpp文件的总是心存纠结。幸好导师有详细的PPT让 我了解,一次对于Package的认 阅读全文
posted @ 2012-12-12 10:47 jeffkuang 阅读(175) 评论(0) 推荐(0)
摘要:reinterpret_cast <new_type> (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了 reinterpret_cast的字面意思:重新解释(类型的比特位)。我们真的可以随意将一个类型值的比特位交给另一个类型作为它的值吗?其实不然。IBM的C++指南里倒是明确告诉了我们reinterpret_cast可以,或者说应该在什么地 阅读全文
posted @ 2012-12-12 10:42 jeffkuang 阅读(133) 评论(0) 推荐(0)
摘要:派生类的构造函数:1.在派生类构造函数中,只要基类不是仅使用无参的默认构造函数,都要显示的给出基类名称参数表;2.基类没有定义构造函数,派生类也可以不定义,使用默认构造函数;3.基类有带参构造函数,派生类必须定义构造函数。派生类与基类:1.派生类对象可以赋值给基类的对象,其实是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类的新成员无值可赋;2.可以讲一个派生类对象的地址赋给其基类的指针变量,但是只能通过这个指针访问派生类中由基类继承来的成员,不能访问新成员;多态性:编译时多态,通过函数的重载和运算符的重载来实现的;有别于编译时多态(重载)——运行时的多态: 1.. 阅读全文
posted @ 2011-11-25 16:02 jeffkuang 阅读(265) 评论(0) 推荐(0)
摘要:C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的复 杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无法 替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。 现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。 我想把我自己的经验分享给大家,希望帮助新人少走些弯路。 在此我们不讨论具体的技术细节,只说我们应该学习... 阅读全文
posted @ 2011-11-25 13:16 jeffkuang 阅读(104) 评论(0) 推荐(0)
摘要:我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。在对话框中添加一个按钮,控件ID为ID_RUNEXCEL,界面如下(是不是很搞笑哇,不过没关系,它照样能实现强大的功能!)。再在该按钮上添加消息BN_CLICKED,其消息映射函数为OnRunexcel(),下面我们的工作就是要完成这个OnRunexcel()函数。在这里我们通过一个实例来说明VC是如何调用Excel2003的接口编程的。 我们要编程输出一个如下表格。格式如下: 阅读全文
posted @ 2011-11-25 12:53 jeffkuang 阅读(2055) 评论(0) 推荐(0)
摘要:学习C++已经有一段时间了,一直都是学习基础的东西,每次写的代码都比较少,没有明确的学习目标,基础还是基础,漫无边际的,基本上都是做一道或者几道算法题,连一个小小的实战都没有,也不知道自己学得怎么样了,现在终于有一个小小的实战了《C++ 一个网络编程实例》。由于自己一直在做C#,只能业余时间学习C++,都说C++ 是那么的难,暂时还没有感觉到有多难,毕竟写代码也有两年多了。我要学习多久才能进一家做C++研发的公司呢?相信在不远处有一家C++研发公司在等着我。这只是一个小小的实例,包括Socket编程、多线程、文件操作。简 单介绍:他实现了点对点聊天,一个服务器,一个客户端,主线程用来发送数据, 阅读全文
posted @ 2011-11-25 12:48 jeffkuang 阅读(959) 评论(2) 推荐(1)
摘要:今天在CSDN上看到一篇文章,发现C++0x(或者称C++11或者C++0B)确实有很多令人兴奋的新特性,搜索一番,看了Stroustrup的C++11FAQ,颇有感想,因此希望与大家共享一下。想必大家都有自己的看法,欢迎探讨。1. 新特性展示,您是喜欢还是反感?以下我想展示几个目前可用的一些新特性,给不想花时间详细了解的读者一个直观感受。(我使用MINGW GCC 4.6.1,注意加--std=c++0x或者--std=gnu++0x)在C++98中,我要循环一个vector<string>:1 for(vector<string>::const_iterator i 阅读全文
posted @ 2011-11-25 12:38 jeffkuang 阅读(161) 评论(0) 推荐(0)
摘要:在这里总结一下const限定修饰符的各种用法,都已经过vs2010测试。1) 声明及初始化const常量。在声明一个const常量时,必须对其初始化,否则会报错。1 const int constvar; //error2 const int constvar = 10; //ok但是,有一个例外的情况,就是extern进来的const常量不需要初始化(如果该常量其他地方确实有出现,这时将它extern进来并且初始化反而会出错)。1 extern const int externvar;2) 指针。对于指针变量有以下四种情况(这四句是不完整的,其中有些必须在声明时进行初始... 阅读全文
posted @ 2011-11-25 12:30 jeffkuang 阅读(202) 评论(0) 推荐(0)
摘要:说起单元测试,是代码重构,和开发一款稳定、高可维护性的软件所必需的部分。现在有好多单元测试的工具,可以用在不同的环境和不同的语言,如JUnit,NUnit,Boost_Test,这里简单介绍一下Google的Test工具,GTest。在gtest.h的末尾(#endif之前)添加如下语句://我自己添加的 #ifdef _DEBUG #pragma comment(lib,"gtestd.lib") #else #pragma comment(lib,"gtest.lib")#endif//启动所有测试int main(int argc, char ** 阅读全文
posted @ 2011-11-25 10:32 jeffkuang 阅读(173) 评论(0) 推荐(0)