
理论
文章平均质量分 56
kuailekemi
这个作者很懒,什么都没留下…
展开
-
抽象类及其方法
在C#中使用关键字 abstract 来定义抽象类和抽象方法。不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例。"一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用."- C++ Programming Language by Stroustrup Chapter13.2转载 2013-01-11 17:06:47 · 375 阅读 · 0 评论 -
Event和Mutex区别
事件事件是用来同步地位不相等的线程的,事件可以用来使一个线程完成一件事情,然后另外的线程完成剩下的事情。事件的使用很灵活,自动事件的激发态是由人工来控制的,而Mutex在释放(releaseMetux)后就一直处于激发态,直到线程WaitForSingleObject。事件可以用来控制经典的读写模型和生产者和消费者模型。相应的方式为,生成者等待消费者的消费,再消费者消费完后通知生产者进行生产。转载 2013-07-17 17:49:13 · 983 阅读 · 0 评论 -
Windows下Critical Section、Event、Mutex、Semaphores区别
临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含转载 2013-07-17 17:50:04 · 891 阅读 · 0 评论 -
C语言中的单精度双精度数的有效位数
#include "stdio.h" #include "conio.h"void main() { printf("%.20f\n",0.1234567890123456789f); getch(); }观察在VC6,WinTC中的运行结果,可能是0.1234567891043281560000.12345678901234567700转载 2013-05-04 14:34:18 · 2764 阅读 · 0 评论 -
为什么要加#include "stdafx.h"
所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。这样可以加快编译速度,节省时间。预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。编译器通过一转载 2013-04-04 00:06:18 · 700 阅读 · 0 评论 -
__cdecl, _stdcall , PASCAL, _fastcall, _thiscall
来自百度百科 几种函数调用方式__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。_stdcall 是StandardCall的缩写,是C++的标准转载 2013-02-28 15:13:27 · 430 阅读 · 0 评论 -
stl vector
// stl-vector.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;void useVector(){ vector aa; int num = 0; aa.reserve(11原创 2013-03-06 17:31:36 · 660 阅读 · 0 评论 -
一个简单的多线程例子-互斥量
// Mutex.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;DWORD WINAPI Func1Proc(LPVOID lpParam);DWORD WINAPI Func2Proc(LP原创 2013-03-05 14:26:41 · 926 阅读 · 0 评论 -
一个简单的多线程例子-临界区
// Critical.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;static int nGloble = 0;CRITICAL_SECTION gcs;DWORD WINAPI R原创 2013-03-05 15:11:14 · 1342 阅读 · 0 评论 -
函数指针
函数指针的概念,在潭浩强先生的C语言程序设计这本经典的教程中提及过,在大多数情况下我们使用不到,也忽略了它的存在。函数名实际上也是一种指针,指向函数的入口地址,但它又不同于普通的如int*、double*指针,看下面的例子来理解函数指针的概念:[cpp] view plaincopyint function( int x, int y ); i转载 2013-01-31 13:29:42 · 438 阅读 · 0 评论 -
浅谈C++多态性【转】
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定转载 2013-01-30 15:05:19 · 417 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做转载 2013-01-30 17:17:07 · 396 阅读 · 0 评论 -
静态成员变量和静态成员函数(static)
面向对象的static关键字1、静态数据成员在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员。先举一个静态数据成员的例子。//Example 1#include class Myclass{public: Myclass(int a,int b,int c); void GetSum();private: i转载 2013-01-30 14:40:12 · 408 阅读 · 0 评论 -
全局变量、局部变量、静态全局变量、静态局部变量的区别
把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的。================================================================C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6转载 2013-01-30 14:08:08 · 375 阅读 · 0 评论 -
Stack & Heap in C/C++ .
一、预备知识?程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)? 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ? 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(st转载 2012-03-20 10:54:59 · 640 阅读 · 0 评论 -
string类构造、拷贝构造、赋值、操作符函数实现及注意事项
通过对string类构造、拷贝构造、赋值、操作符函数的实现及调试,可以更加深刻的认识在创建或修改对象内容时的调用关系。下面是简单的实现:Mystr类:[cpp] view plaincopyclass Mystr{ public: Mystr(void); Mystr(const char *str);//加转载 2012-11-07 10:36:32 · 627 阅读 · 0 评论 -
C++ 初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; fo转载 2012-11-27 15:04:37 · 367 阅读 · 0 评论 -
二叉树的深度优先遍历和广度优先遍历
深度优先遍历,也就深入的遍历,沿着每一个分支直到走到最后,然后才返回来遍历剩余的节点。二叉树不同于图,图需要标记节点是否已经访问过,因为可能会存在环,而二叉树不会出现环,所以不需要标记。那么,我们只需要一个栈空间,来压栈就好了。因为深度优先遍历,遍历了根节点后,就开始遍历左子树,所以右子树肯定最后遍历。我们利用栈的性质,先将右子树压栈,然后在对左子树压栈。此时,左子树节点是在top上的,所以可以先转载 2013-07-03 15:25:45 · 32025 阅读 · 1 评论