libsmtp–是一个开源的C语言动态库,与其想对应,libsmtp++采用C++开发。libsmtp–使得开发人员能够直接在程序内部实现SMTP邮件发送,它的主要特点是短小精炼、易于使用,已在Linux上测试通过,它支持给多个收件人同时发送统一内容的邮件,并且支持抄送以及密送。 阅读全文
为了让应用程序在发不之后不需要重新编译而修改程序行为,我们引入了插件机制,如Linux下的“*.so”、Windows下的“.dll”以及Java中的“.jar”,这种机制让程序的框架趋于小巧、分工明细,完成详细设计文档以后,应用程序的功能接口已经约定完好,根据需要,可以将重要的功能接口封装成插件形式的函数库,根据插件的不同,安排不同的开发人员维护,这样也可以避免因为一群人共用一套代码文件造成同步问题。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、抛出指针通常是个坏主意,抛出指针要求在对用处理代码存在的任意地方存在指针所指向的对象。
2、不能不处理异常。异常是足够重要的、使程序不能继续正常执行的事件。如果找不到匹配的catch,程序就调用库函数terminate。
3、如果catch(…)与其他catch子句结合使用,它必须是最后一个,否则,任何跟在它后面的catch子句都将不能匹配。 阅读全文
1、和栈相反,队列是一种先进先出(first in first out,缩写为FIFO)的线性表,它只允许在表的一端插入,在表的另一端删除元素。其中允许插入的一段称为队尾,允许删除的一端则称为对头。
2、用链表表示的队列称为链队列,一个链队列显然需要两个分别表示对头和队尾的指针(分别称为头指针跟尾指针)才能唯一确定。为了操作方便起见,我们也给链队列添加一个头结点,并令头指针指向头结点,由此,判断链队列为空的等价条件便是头指针跟尾指针均指向了头结点。
3、下面是链队列的存储表示以及基本操作的C语言算法描述伪代码: 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、面向对象编程的关键思想是多态性。
2、在C++中,基类必须指出希望派生类重定义哪些函数,定义为virtual的函数是基类期望派生类重新定义的,基类期望派生类继承的函数不能定义为虚函数。
3、在C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义的。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
2、同时定义前缀式操作符和后缀式操作符存在一个问题:它们的形参数目和类型相同,普通重载不能区别所定义的是前缀式操作符还是后缀式操作符。为了解决这个问题,后缀式操作符函数接受一个额外的(即无用的)int型形参。使用后缀式操作符时,编译器提供0作为这个形参的实参。
3、如果cpplive是一个vector<string>对象,以下代码:
sort(cpplive.begin(), cpplive.end(), greater<string>());
将按降序对vector进行排序。第三个参数用于传递比较元素的谓词函数。该实参是greater<string>类型的临时对象,是一个将>操作符用于两个string操作数的函数对象。 阅读全文
分章分类 : C++, C++Primer笔记, 应用与编程
1、重载操作符(即运算符重载)是具有特殊名称的函数,保留字operator后接需要定义的操作符符号。
2、除了函数调用操作符之外,重载操作符的形参数目(包括成员函数的隐式this指针)与操作符的操作数目相同。函数调用操作符可以接受任意数目的操作数。
3、不能用过连接其他合法符号来创建任何新的操作符。例如,试图定义一个operator**操作符以提供供求幂操作是非法的。 阅读全文
C语言中的内存分配函数主要有malloc、calloc、realloc、free等,关于他们的功能、区别及用法想必不是每个程序员都掌握得很好的,本人也不例外。要找到答案,man手册必然是最权威的资料,下面便是man手册中关于内存分配函数介绍的中文译本。
一、主要功能:分配和释放动态内存。
二、函数声明: 阅读全文
1、栈是限定仅在表尾进行插入或删除操作的线性表。表尾端称为栈顶,表头端称为栈底。栈的修改是是按照后进先出的原则进行的,因此,栈又成为后进先出(last in first out)的线性表(简称LIFO结构)。
2、当栈顶指针跟栈底指针相同时说明栈空了,因此非空栈中的栈顶指针始终在栈顶元素的下一个位置上。
3、以下是栈的顺序存储表示以及基本操作的算法描述: 阅读全文
1、线性表的链式存储结构的特点是用一组任意的存储但愿存储线性表的数据元素。它包括两个域:其中存储数据信息的域称为数据域,存储直接后继存储位置的域称为指针域。
2、循环链表的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表的操作和线性链表基本一致,差别之处仅在于算法中的循环条件不再是p或p->next是否为空,而是它们是否等于头指针。
3、双向链表的结点有两个指针域,其中一个指向直接后继,另一个指向直接前驱。 阅读全文