
C++
文章平均质量分 82
黑の旋风
有兴趣的老铁们欢迎关注公众号:gh_7bad42dfce12,微博文章同步更新至微信公众号~
展开
-
约瑟夫环扩展问题
编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码,(正整数,可以自由输入),开始入选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报到M时停止报数。报M的人出列,将他的密码作为新的M值,从他的顺时针方向上的下一个人开始从1报数,如此下去,直到所有人出列为止。具体代码如下:#include using namespace std;typedef stru原创 2016-04-26 18:13:26 · 1390 阅读 · 0 评论 -
《C++编程思想》 第十四章 多态和虚函数 (原书代码+习题+讲解)
一.相关知识点函数调用捆绑 把函数体与函数调用相联系称为捆绑(binding)。当捆绑在程序运行之前(由编译器和连接器)完成时,称为早捆绑。我们可能没有听到过这个术语,因为在过程语言中是不会有的:C编译只有一种函数调用,就是早捆绑。上面程序中的问题是早捆绑引起的,因为编译器在只有 instrument地址时它不知道正确的调用函数。解决方法被称为晚捆绑,这意味着捆绑在运行时发生,原创 2015-08-11 23:20:18 · 1034 阅读 · 1 评论 -
《C++编程思想》 第十三章 继承和组合 (原书代码+习题+解答)
一.相关知识使用其他人已经创建并调试过的类: 关键是使用类而不是更改已存在的代码。这一章将介绍两种完成这件事的方法。第一种方法是很直接的:简单地创建一个包含已存在的类对象的新类,这称为组合,因为这个新类是由已存在类的对象组合的。 第二种方法更巧妙,创建一个新类作为一个已存在类的类型,采取这个已存在类的形式,对它增加代码,但不修改它。这个有趣的活动被称为继承,其中大量的工作由原创 2015-08-10 22:54:00 · 1031 阅读 · 0 评论 -
《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)
相关代码如下:1./*声明与定义的区别*/#include using namespace std;extern int i;//声明extern float f(float);//声明float b;//定义+声明float f(float a)//定义{ return a + 1.0;}int i;//定义int h(int x)//定义+声明{ r原创 2015-07-27 01:17:43 · 1052 阅读 · 0 评论 -
《C++编程思想》第三章 隐藏实现 (原书代码+习题+解答)
一.相关知识点 1. 在C++中,存取控制并不是面向对象的特征,但它为类的创建者提供了很有价值的访问控制。类的用户可以清楚地看到,什么可以用,什么应该忽略。更重要的是,它保证了类的用户不会依赖任何类的实现细节。有了这些,我们就能更改类的实现部分,没有人会因此而受到影响,因为他们并不能访问类的这一部分。一旦我们有了更改实现部分的自由,就可以在以后的时间里改进我们的设计,而且允许犯错误。要知道,原创 2015-07-27 15:45:45 · 916 阅读 · 0 评论 -
《C++编程思想》 第七章 常 量 (原书代码+习题+解答)
一.相关知识点 在 C语言中可以选择这样书写:const bufsize; 这样写在C++中是不对的,而 C编译器则把它作为一个声明,这个声明指明在别的地方有存储分配。因为C默认const是外部连接的, C++默认const是内部连接的,这样,如果在 C++中想完成与C中同样的事情,必须用extern把连接改成外部连接:extern const bufs原创 2015-07-30 23:43:22 · 1115 阅读 · 0 评论 -
《C++编程思想》第八章 内 联 函 数 (原书代码+知识点+习题+解答)
一.相关知识点任何在类中定义的函数自动地成为内联函数,但也可以使用inline关键字放在类外定义的函数前面使之成为内联函数。但为了使之有效,必须使函数体和声明结合在一起,否则,编译器将它作为普通函数对待。因此inline int PlusOne(int x);没有任何效果,仅仅只是声明函数(这不一定能够在稍后某个时候得到一个内联定义)。成功的方法如下:inline int Plus原创 2015-08-01 01:25:18 · 1307 阅读 · 0 评论 -
《C++编程思想》第四章 初始化与清除(原书代码+习题+解答)
相关代码:1.#include class tree{ int height;public: tree(int initialHeight); ~tree(); void grow(int years); void printsize();};tree::tree(int initialHeight){ height = initialHeight;}tree原创 2015-07-28 00:01:42 · 1161 阅读 · 0 评论 -
《C++编程思想》第五章 函数重载与缺省参数 (原书代码+习题+解答)
一.相关知识点 在使用缺省参数时必须记住两条规则。第一,只有参数列表的后部参数才可是缺省的,也就是说,我们不可以在一个缺省参数后面又跟一个非缺省的参数。第二,一旦我们开始使用缺省参数,那么这个参数后面的所有参数都必须是缺省的。(这可以从第一条中导出。) 在C++中,在函数定义时,我们并不一定需要标识符,像:void f(int X, int,float f) {原创 2015-07-28 14:29:00 · 997 阅读 · 0 评论 -
《高质量程序设计指南C/C++语言》笔记总结
在对林锐,韩永泉编著的《高质量程序设计指南C/C++语言》的学习中,我从中了解到了很多编程的小细节和重要的概念,特总结规整如下:1.标准C语言允许任何非void类型的指针和void类型的指针之间进行直接的相互转换。但在C++中,可以把任何类型的指针直接指派给void类型指针,因为void*是一种通用指针;但是不能反过来将void类型指针直接指派给任何非void类型的指针,除非进行强制转换。因此原创 2015-07-23 23:18:03 · 913 阅读 · 0 评论 -
《C++编程思想》(第二版)第2章 对象的创建和使用(习题及答案)
与习题相关的代码Hello.cpp#include using namespace std; int main(){ cout << "Hello, World! I am " << 8 << " Today!" << endl;}Stream2.cpp#include using namespace std; int main(){ cout<<原创 2015-07-24 00:50:47 · 1129 阅读 · 0 评论 -
基于Http协议的Web服务器
本篇博客通过自己建立Http服务器并且结合MySql来实现Web通信,具体代码详见GitHub:https://github.com/YuanHei/HTTPD在此整理其运行显示界面1.首先启动Http服务器2.在浏览器上输入网址(我是在本机进行测试,用的IP是127.0.0.1,Http协议的TCP连接默认端口号为80)此时页面显示如下:图原创 2016-03-21 20:09:21 · 1776 阅读 · 0 评论 -
C++循环链表(殷人昆版)
#include #include #include using namespace std;templatestruct CircListNode{ T data; CircListNode *next; CircListNode(CircListNode *n = NULL) :next(n) {} CircListNode(T d, CircListNode *n原创 2015-12-30 15:56:03 · 647 阅读 · 0 评论 -
C++双向循环链表(殷人昆版)
#include #include #include using namespace std;templatestruct DblNode{ T data; DblNode *lLink, *rLink; DblNode(DblNode *left = NULL, DblNode * right = NULL) :lLink(left) ,rLink(right) {原创 2015-12-30 15:57:14 · 660 阅读 · 0 评论 -
C++单链表(殷人昆版)
#include #include #include using namespace std;templatestruct ListNode{ T data; ListNode *next; ListNode(ListNode *ptr = NULL) :next(ptr) {} ListNode(const T& item, ListNode * ptr = NULL原创 2015-12-30 15:55:10 · 852 阅读 · 0 评论 -
C++顺序表(殷人昆版)
此代码将顺序表的基本创建函数写出,能够完成基本的操作。原创 2015-12-30 15:51:54 · 694 阅读 · 0 评论 -
【单链表实现】学生管理系统(缺少文件输入输出流)
本篇博文结合学过的数据结构单链表的知识,来实现一个学生管理系统的创建,仍有不完善的地方,望大家指出,对于文件输入输出流,会在后续添加。详细代码如下:Garde.h#pragma once#pragma warning(disable:4996)#include #include #include #include #include using namespace原创 2015-11-28 21:23:06 · 1070 阅读 · 0 评论 -
【C++/数据结构】顺序表的基本操作
#include using namespace std;typedef enum{ FALSE, TRUE }Status;templateclass SeqList{public: SeqList(int sz = DefaultSize) { capacity = sz > DefaultSize ? sz : DefaultSize; base = new Ty原创 2015-08-22 15:27:44 · 1536 阅读 · 0 评论 -
【C++】智能指针auto_ptr
C++的auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理,使用std::auto_ptr,要#include 。实现代码如下:#include #include using namespace std;//#define _THROW0() throw ()抛出全部异常templateclass auto_ptr {public: /原创 2015-08-16 11:33:33 · 711 阅读 · 0 评论 -
《C++编程思想》第六章 输入输出流介绍(原书代码+习题+解答)
操纵算子 这里已经添加了一个新的元素:一个称作 endl的操纵算子。一个操纵算子作用于流上,这种情况下,插入一新行并清空流(消除所有存储在内部流缓冲区里的还没有输出的字符)。也可以只清空流:cout另外有一个基本的操纵算子把基数变为 oct (八进制), dec (十进制)或hex (十六进制):cout有一个用于提取的操纵算子“跳过”空格:cin>>ws;还原创 2015-07-30 11:16:11 · 2869 阅读 · 0 评论 -
《C++编程思想》 第九章 命 名 控 制 (原书代码+知识点+习题+解答)
一.相关知识点 那些通常放在头文件里的名字,像常量、内联函数(inline function),在缺省情况下都是内部连接的(当然常量只有在C + +中缺省情况下是内部连接的,在 C中它缺省为外部连接)。注意连接只引用那些在连接/装载期间有地址的成员,因此类声明和局部变量并没有连接。名字空间的产生与一个类的产生非常相似:namespace MyLib{//D原创 2015-08-03 12:49:13 · 900 阅读 · 0 评论 -
《C++编程思想》 第十一章 运算符重载 (原书代码+习题+解答)
一.相关代码1./*运算符重载语法*//*OPOVER.cpp*//*这两个重载的运算符被定义为内联成员函数。对于二元运算符,单个参数是出现在运算符右侧的那个。当一元运算符被定义为成员函数时,没有参数。成员函数被运算符左侧的对象调用。对于非条件运算符(条件运算符通常返回一个布尔值),如果两个参数是相同的类型,希望返回和运算相同类型的对象或引用。如果它们不是相同类型,它作什么样的原创 2015-08-08 23:33:13 · 1094 阅读 · 0 评论 -
【C++/STL】list的实现(没有采用迭代器和空间配置器所实现的双向链表的基本功能)
#include using namespace std;//没有采用迭代器和空间配置器所实现的双向链表的基本功能template //定义模板类class list //list类{public: typedef size_t s原创 2015-07-10 18:56:57 · 830 阅读 · 0 评论 -
【C/C++】文件读写
C语言:1.二进制文件写#includevoid main(){ int ar[10] = {12,23,34,45,56,67,78,89,90,100}; FILE *fp = NULL; //文件指针 fp = fopen("Text2.txt","w"); //打开原创 2015-07-07 23:23:27 · 744 阅读 · 0 评论 -
Int函数运算符重载
用C++编写Int函数来实现基本运算如下:#include using namespace std;class Int{public: Int(int i=0):m_i(i) {} ~Int() {} Int& operator++() //前置++ { m_i++; return *this; } In原创 2015-06-07 19:22:25 · 960 阅读 · 0 评论 -
运算符的重载(复数的相关运算)
运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。 定义运算符重载函数的一般格式:返回值类型 类名::operator重载的运算符(参数表){……}operator是关键字,它与重载的运算符一起构成函数名。因函数名的特殊性,C++编译器可以将这类函数识别出来。原创 2015-06-07 00:02:51 · 848 阅读 · 0 评论 -
浅拷贝(在进行其中一个对象的运算时开辟新的空间)
如图变换,且对于指向同一空间的String进行计数代码如下:#include using namespace std;class String; //提前声明class String_rep //定义类Strin原创 2015-06-07 02:14:18 · 836 阅读 · 0 评论 -
二维数组的创建
方法一:使用数组指针用new开辟空间#includeusing namespace std;#define ROW 3#define COL 4void main(){ int(*p)[COL] = new int[ROW][COL]; for(int i=0; i<ROW; ++i) { for(int j=0; j<COL; ++j) { p[i][j]原创 2015-06-07 01:50:39 · 1192 阅读 · 0 评论 -
String运算符重载
运算符的重载实际是一种特殊的函数重载,必须定义一个函数,并告诉C++编译器,当遇到该重载的运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。 定义运算符重载函数的一般格式:返回值类型 类名::operator重载的运算符(参数表){……}operator是关键字,它与重载的运算符一起构成函数名。因函数名的特殊性,C++编译器可以将这类函数识别出来。原创 2015-06-07 01:28:45 · 1954 阅读 · 0 评论 -
《C++ Templates》(基础部分)笔记整理
函数模板一.初探函数模板 函数模板的声明形式: template//template 可以用class来替代typename,聪语义上讲,二者等价。因此,即使在这里使用class,你也可以用任何类型(前提是该类型提供模板使用的操作)来实例化模板参数。另外还应该注意,这种用法和类型声明不同,也就是说,在声明(引入)类型参数的时候,不能用关键字struct代替typenam原创 2015-06-25 00:34:35 · 974 阅读 · 0 评论 -
【C++】通用单链表
在C++的学习中,采用模板类,而采用虚函数实现多态性,达到通用的目的。结点类数据域被改造为指针,而把数据放在一个抽象类中,由指针与之建立联系。 采用虚函数实现多态性,达到通用的目的。堆内存的分配与释放,关键不是创建,而是释放! 要特别仔细揣摩堆内存的分配与释放,删除一个结点时系统自动调用结点类析构函数释放结点占用的动态内存,而结点释放时系统自动调用数据域类析构函原创 2015-07-05 16:49:47 · 1261 阅读 · 0 评论 -
【C++】栈空栈满异常处理
异常处理的机制:1.如果没有异常发生,继续执行try块中的代码,与try块相关联 的catch子句被忽略,程序正常执行,main()返回0。2.当第一个try块在for循环中抛出异常,则该for循环退出,try块也退出,去执行pushOnFull异常的catch子句。istack.PrintStack()不再执行,被忽略。3.如果第二个try块调用Pop()抛出异常,则退出for和原创 2015-07-06 10:13:57 · 2907 阅读 · 0 评论 -
《C++编程思想》 第十章 引用和拷贝构造函数(原书代码+知识点+习题+解答)
一.相关知识点使用引用时有一定的规则:1) 当引用被创建时,它必须被初始化。(指针则可以在任何时候被初始化。)2) 一旦一个引用被初始化为指向一个对象,它就不能被改变为对另一个对象的引用。(指针则可以在任何时候指向另一个对象。)3) 不可能有NULL引用。必须确保引用是和一块合法的存储单元关连。仅当准备用传值的方式传递类对象时,才需要拷贝构造函数。如果不需要这么做,就不要拷原创 2015-08-03 20:27:48 · 846 阅读 · 0 评论 -
《C++编程思想》 第十二章 动态对象创建 (原书代码+习题+解答)
一.相关知识点重载new和delete 当创建一个new表达式时有两件事发生。首先,使用运算符new分配内存,然后调用构造函数。在delete表达式里,调用析构函数,然后使用运算符delete释放内存。我们永远无法控制构造函数和析构函数的调用(否则我们可能意外地搅乱它们),但可以改变内存分配函数运算符new和delete。被new和delete使用的内存分配系统是为通用目的原创 2015-08-09 22:20:52 · 820 阅读 · 0 评论 -
【C++/数据结构】循环链表的基本操作
#pragma once#ifndef _SCLIST_H_#define _SCLIST_H_#include #include using namespace std;typedef enum{FALSE,TRUE} Status;template class List;templateclass ListNode{ friend class List;pub原创 2015-08-22 15:43:43 · 873 阅读 · 0 评论 -
【C++/数据结构】单链表的基本操作
#pragma once#ifndef _CLIST_H_#define _CLIST_H_#include #include using namespace std;template class List;typedef enum { FALSE, TRUE }Status;templateclass ListNode{ friend class List;pub原创 2015-08-22 15:41:30 · 885 阅读 · 0 评论 -
《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(一)
一.总结本章的内容:1.如果声明指针是void* ,它意味着任何类型的地址都可以间接引用那个指针(而如果声明int*,则只能对int型变量的地址间接引用那个指针)。一旦我们间接引用一个void*,就会丢失关于类型的信息。这意味着在使用前,必须转换为正确的类型。2.Static变量使得局部变量的值在程序的整个生命期里仍然存在,其优点是在函数范围之外它是不可用的,所以不可能被轻易改变。3.原创 2015-07-25 00:50:18 · 2815 阅读 · 0 评论 -
【C++/数据结构】双向链表的基本操作
#pragma once#ifndef _DLIST_H#define _DLIST_H#include #include using namespace std;typedef enum{FALSE, TRUE} Status;template class List;templateclass ListNode{ friend class List;public:原创 2015-08-22 15:45:31 · 628 阅读 · 0 评论 -
《C++编程思想》(第二版)第3章 C++中的C(笔记、习题及答案)(二)
#include #include using namespace std;void stringRef(string& s) { s += " come blow";}void stringPtr(string* p) { p->append(" your horn");}int main() { string s = "Little Boy B原创 2015-07-26 02:00:08 · 1793 阅读 · 1 评论 -
【C++/STL】list的实现(采用空间配置器和迭代器)
在list库函数的编译中仍然有很多问题,在源代码的编译中有些内容尚未搞懂,在后期的学习中会进行更加深入的学习,希望大家可以对我的问题提出建议和批评,谢谢大家~ 具体的代码如下: #include using namespace std;//采用迭代器和空间配置器所实现的双向链表的基本功能template >原创 2015-07-13 20:04:44 · 868 阅读 · 0 评论