随笔分类 -  C++

摘要:一、相关概念的介绍什么是Makefile?怎么书写Makefile?竟然有工具可以自动生成Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚。1.Makefile makefile用来定义整个工程的编译规则。一个工程中的源文件计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要.. 阅读全文
posted @ 2013-01-06 09:23 hnrainll 阅读(4238) 评论(1) 推荐(1) 编辑
摘要:本文是由敏捷宣言签署人之一、《Clean Code(代码整洁之道)》一书的作者Robert C. Martin为他的《Applying Principles and Patterns》这本书搜集整理而来。单一责任原则(SRP)只有一个理由去修改一个类。例如,如果一个业务规则的改变会导致这个类的修改,那么,数据库、界面、报表格式或系统任何其它的部分的改变都不该迫使这个类做修改。http://davidhayden.com/blog/dave/archive/2005/05/29/1066.aspxhttp://c2.com/cgi/wiki?SingleResponsibilityPrincip 阅读全文
posted @ 2012-11-29 10:57 hnrainll 阅读(469) 评论(0) 推荐(0) 编辑
摘要:透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础.三大特性是:封装,继承,多态所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承 阅读全文
posted @ 2012-09-18 16:31 hnrainll 阅读(212777) 评论(6) 推荐(14) 编辑
摘要:面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。在Java中类中成员的属性有:public, protected, <default>, private,这四个属性的访问权限依次降低。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称 阅读全文
posted @ 2012-09-18 16:21 hnrainll 阅读(37777) 评论(1) 推荐(6) 编辑
摘要:转自:http://vanlee820816.blog.163.com/blog/static/17981351200773134338575/通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?没错,我也知道这将会使构造函数成为私有的,这意味着什么? 我们知道,当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私有成员,所以这将导致编译出错。 你于是说:“哈哈。”我们制造了一个似乎无法产生对象的class. 阅读全文
posted @ 2012-09-17 17:12 hnrainll 阅读(4964) 评论(0) 推荐(0) 编辑
摘要:输入原理:程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入#1:#include <iostream>using namespace std;int main(){ char str[8]; cin.getline(str, 5); cout<<str<<endl; cin.getline(str, 5); cout<<s 阅读全文
posted @ 2012-08-01 09:51 hnrainll 阅读(861) 评论(0) 推荐(2) 编辑
摘要:其定义在yvals.h当中. 目录为Microsoft Visual Studio\VC98\INCLUDE/* NAMESPACE */ #if defined(__cplusplus) #define _STD_BEGIN namespace std { #define _STD_END } #define _STD ::std::/*We use the stdext (standard extension) namespace to contain extensions that are not part of the curre... 阅读全文
posted @ 2012-07-31 14:53 hnrainll 阅读(1640) 评论(0) 推荐(0) 编辑
摘要:iostreamiostream 的意思是 输入输出流直接点说就是in(输入) out(输出) stream(流)取 in out 的首字母与 stream 合成C++语言中#include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件。 在旧的标准C++中,使用#include<iostream.h> 但在新标准中,用#include<iostream>,而且在VS中编程的同时要注意要添加: using namespace std; using namespace std详解 一 : <iostream>和 阅读全文
posted @ 2012-07-31 12:09 hnrainll 阅读(2813) 评论(0) 推荐(0) 编辑
摘要:转载自:http://blog.csdn.net/oanqoanq/article/details/7169291C++著名程序库的比较和学习经验1、C++各大有名库的介绍——C++标准库2、C++各大有名库的介绍——准标准库Boost3、C++各大有名库的介绍——GUI4、C++各大有名库的介绍——网络通信5、C++各大有名库的介绍——XML6、C++各大有名库的介绍——科学计算7、C++各大有名库的介绍——游戏开发8、C++各大有名库的介绍——线程9、C++各大有名库的介绍——序列化10、C++各大有名库的介绍——字符串11、C++各大有名库的介绍——综合12、C++各大有名库的介绍——其 阅读全文
posted @ 2012-07-23 16:43 hnrainll 阅读(675) 评论(0) 推荐(1) 编辑
摘要://namesp.hnamespace pers{ const int LEN = 40; struct Person{ char fname[LEN]; char lname[LEN]; }; void getPerson(Person &); void showPerson(const Person &);}namespace debts{ using namespace pers; struct Debt{ Person name; double amount; }; void ... 阅读全文
posted @ 2012-04-27 21:44 hnrainll 阅读(3295) 评论(0) 推荐(1) 编辑
摘要:按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p );// 用C风格的字符串p作为初始化值//…}String s1 = “hello”;//OK 隐式转换,等价于String s1 = String(“hello”);但是有的时候可能会不需要这种隐式转换,如下:class String { String ( int n );//本意是预先分配n个字节给字符串String ( const char* p );// 用C风格的字符串p作为初始化值//…}下面 阅读全文
posted @ 2012-04-17 08:50 hnrainll 阅读(271) 评论(0) 推荐(0) 编辑
摘要:#include <iostream.h>非标准输入输出流#include <iostream>标准输入输出流C++中为了避免名字定义冲突,特别引入了“名字空间的定义”,即namespace。1,当代码中用<iostream.h>时,输出可直接引用cout<<x;//<iostream.h>继承C语言的标准库文件,未引入名字空间定义,所以可直接使用。2,当代码中引入<iostream>时,输出需要引用std::cout<<x;如果还是按原来的方法就会有错。使用<iostream>时,引入std::有 阅读全文
posted @ 2012-04-13 10:52 hnrainll 阅读(3686) 评论(0) 推荐(1) 编辑
摘要:学无止境!!!第一部分:(参考百度百科)一、STL简介STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++ 阅读全文
posted @ 2012-03-09 10:36 hnrainll 阅读(478) 评论(0) 推荐(1) 编辑
摘要:#include<iostream>#include<string.h>using namespace std; //申明命名空间//error()函数void error(){ cout<<"/nCan not open the file."<<endl; exit(1);//退出}int main(void){ FILE *fp;//定义一个文件指针 char str[80]; cout << "Input:";//从键盘读取输入 cin.getline(str,80); if( (fp=f 阅读全文
posted @ 2011-08-12 21:55 hnrainll 阅读(592) 评论(0) 推荐(0) 编辑
摘要:ANSIC标准定义了以下6种可供C语言使用的预定义宏:__LINE__ 在源代码中插入当前源代码行号__FILE__ 在源代码中插入当前源代码文件名__DATE__ 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕__TIME__ 在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕 __STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。__cplusplus标识符__LINE__和__FILE__通常用来调试程序;标识符__DATE__和__TIME__通常用来在编译后的程序中加入一个时间标志,以区分程序的不同版本;当要求程序严格遵循ANSIC标准时,标识符__ 阅读全文
posted @ 2011-07-21 16:20 hnrainll 阅读(1451) 评论(0) 推荐(0) 编辑
摘要:飞鸽传书中文源码 下载地址:http://www.azhi.net/blog/article.asp?id=35 阅读全文
posted @ 2011-07-05 15:15 hnrainll 阅读(1708) 评论(0) 推荐(0) 编辑
摘要:IP Messenger是一款局域网内部聊天、文件传输工具,具有很多优点,如数据通讯不需要建立服务器、直接在两台电脑间通信和数据传输,支持文件及文件目录的传输,安全快捷以及小巧方便等优异特点,因此很多公司都采用它作为部门、公司内部的IM即时通信工具。 IP Messenger在程序结构方面采用了Windows SDK处理结构,通信方面采用了TCP/UDP通信方式,在文件传输处理方面采用文件映射技术,等等。通过分析IP Messenger的运行、工作原理,可以提高并加深对Windows处理流程的理解,提高SOCKET编程技术等,因此特对其源码进行分析,以抛砖引玉,共同提高大家的编程技术。 1、I 阅读全文
posted @ 2011-07-05 15:14 hnrainll 阅读(6342) 评论(1) 推荐(0) 编辑
摘要:C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。 从标准头文件说起 某企业曾经给出如下的一道面试题: 为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh#define __INCvxWorksh #ifdef __cplusplu 阅读全文
posted @ 2011-06-09 16:33 hnrainll 阅读(403) 评论(0) 推荐(0) 编辑
摘要:以前我要建立一个二维数组,总是使用 int N=5, M=6; vector<vector<int> > Matrix(N); for(int i =0; i< Matrix.size(); i++){ Matrix[i].resize(M); } 上面多写了三行,就是为了指定 Matrix 的烈数。 今天才发现,可以用更简单的方法完成上面的工作 下面的一行就可以代替上面的四行 vector<v... 阅读全文
posted @ 2011-05-26 11:47 hnrainll 阅读(13405) 评论(2) 推荐(0) 编辑
摘要:vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.变量声明: 2.1 例:声明一个int向... 阅读全文
posted @ 2011-05-26 11:46 hnrainll 阅读(540) 评论(1) 推荐(0) 编辑