随笔分类 -  CPP-基础

摘要:函数指针 函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。1,方法:函数指针的声明方法为:函数类型 (标志符指针变量名) (形参列表);注1:“函数类型”说明函数的返回类型,“(标志符指针变量名 )”中的括号不能省,若省略整体则成为一个函数说. 阅读全文
posted @ 2013-09-03 17:27 CPYER 阅读(1377) 评论(0) 推荐(1)
摘要:已知类String的原型为:class String{public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String& operator =(const String &other); // 赋值函数 String& operator +(co... 阅读全文
posted @ 2013-09-02 10:44 CPYER 阅读(1074) 评论(0) 推荐(1)
摘要:C++编程语言互换流中的标准输出流,需要iostream.h支持。读为 "c out"。使用范例 1 //用户输入的数字由cin保存于变量a中,并通过cout输出。 2 3 #include 4 using namespace std; 5 int main() 6 { 7 int a; 8 cout> a;10 cout4 using namespace std;5 int main()6 {7 cout>的玩意,究竟算怎么回事呢?我一直想把它们当作关键字,可偏偏不是,而且居然是用C++语言“做”出来的,呵!但printf()用多了就开始有人好心地批判我的程序 阅读全文
posted @ 2013-08-30 14:18 CPYER 阅读(1966) 评论(0) 推荐(1)
摘要:1:c中的malloc和c++中的new有什么区别(1)new、delete 是操作符,可以重载,只能在C++中使用。(2)malloc、free是函数,可以覆盖,C、C++中都可以使用。(3)new 可以调用对象的构造函数,对应的delete调用相应的析构函数。(4)malloc仅仅分配内存,free仅仅回收内存,并不执行构造和析构函数。(5)new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。2.简述c、c++程序编译的内存分 阅读全文
posted @ 2013-08-29 11:39 CPYER 阅读(918) 评论(0) 推荐(0)
摘要:关于++运算符前置和后置重载的实现实例: 1 #include 2 using namespace std; 3 //创建时钟类 4 class Clock 5 { 6 public: 7 Clock(int NewH=0,int NewM=0,int NewS=0);//构造函数 8 void ShowTime();//显示时间函数声明 9 Clock& operator ++();//前置运算符重载10 Clock operator ++(int);//后置运算符重载11 //关于前置运算符的后置运算符的重载说明:如果后面的括号里带有形参... 阅读全文
posted @ 2013-08-28 10:42 CPYER 阅读(1406) 评论(0) 推荐(1)
摘要:友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。我们已知道类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是 阅读全文
posted @ 2013-08-27 17:23 CPYER 阅读(669) 评论(0) 推荐(0)
摘要:一. 什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为 32位系统)如果存放 阅读全文
posted @ 2013-08-27 16:11 CPYER 阅读(912) 评论(0) 推荐(1)
摘要:1.运算符重载定义: C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下: operator () { }2.. 阅读全文
posted @ 2013-08-26 13:27 CPYER 阅读(2278) 评论(0) 推荐(0)
摘要:一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:1 int a = 100; 2 int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 1 #include 2 using namespace std; 3 4 class CExample { 5 private: 6 int a; 7 public: 8 //构造函数 9 CExample(int b) 10 { a = b;} 11 12 ... 阅读全文
posted @ 2013-08-23 11:26 CPYER 阅读(1830) 评论(0) 推荐(0)
摘要:事件(Event) 事件对象也可以通过通知操作的方式来保持线程的同步。并且可以实现不同进程中的线程同步操作。 信号量包含的几个操作原语: CreateEvent() 创建一个事件 OpenEvent() 打开一个事件 SetEvent() 回置事件 WaitForSingleObject() 等待一个事件 WaitForMultipleObjects()等待多个事件 WaitForMultipleObjects 函数原型:1 WaitForMultipleObjects( 2 IN DWORD nCount, // 等待句柄数 3 ... 阅读全文
posted @ 2013-08-22 14:48 CPYER 阅读(532) 评论(0) 推荐(0)
摘要:VC windows api 多线程---临界区临界区(Critical Section)是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()和LeaveCriticalSection()函数去标识和释放一个临界区。所用到的CRITIC. 阅读全文
posted @ 2013-08-22 14:47 CPYER 阅读(618) 评论(0) 推荐(0)
摘要:windows api 多线程---信号量 信号量(Semaphore)和互斥量一样,属于内核对象。它自动执行可用资源查询的测试,如果有可用资源,则可用资源的计数减少1,从而避免其它线程请求资源。当该线程释放该资源后,可用资源计数增加1,则操作系统允许另一个线程请求资源。 信号量与临界区和互斥量的不同在于,它不属于某个线程。也就是说,一个线程可以等待信号量对象(减少它的资源计数),而另一个线程释放该对象(增加它的资源计数)。图3 使用信号量对象控制资源 下面结合图例3来演示信号量对象对资源的控制。在图3中,以箭头和白色箭头表示共享资源所允许的最大资源计数和当前可用资源计数。初始如图(a)... 阅读全文
posted @ 2013-08-22 14:46 CPYER 阅读(582) 评论(0) 推荐(0)
摘要:互斥量的用途和临界区很像。它与临界区的差别在于可以跨线程使用,可以用来同步进行多个线程间的数据访问,但是是以牺牲速度为代价的。只有临界区是非核心对象,那么互斥量就是一个核心对象了。核心对象的特点是有所谓的引用计数。锁住一个未被拥有的互斥量,比锁住一个未被拥有的临界区需要花费几乎100倍的时间(数据引用自《Visual C++ 6.0编程学习捷径》)。VC windows api 多线程---互斥量 与其他几种内核对象不同,互斥对象在操作系统中拥有特殊代码,并由操作系统来管理,操作系统甚至还允许其进行一些其他内核对象所不能进行的非常规操作。为便于理解,可参照图6给出的互斥内核对象的工作模型:图. 阅读全文
posted @ 2013-08-22 14:45 CPYER 阅读(488) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/wangsifu2009/article/details/6728155四种进程或线程同步互斥的控制方法:1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。2、互斥量:为协调共同对一个共享资源的单独访问而设计的。3、信号量:为控制一个具有有限数量用户资源而设计。4、事件: 用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)(同一个进程内,实现互斥,但,无法实现同步,因为其具有“线程所有权”)#include "stdafx.h"#include #inc 阅读全文
posted @ 2013-08-19 23:54 CPYER 阅读(938) 评论(0) 推荐(0)
摘要:static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。 阅读全文
posted @ 2013-08-15 17:38 CPYER 阅读(236) 评论(0) 推荐(0)
摘要:一,C++语言的内建类型中没“BYTE”这么个类型。BYTE是WINDOWSPlatformSDK中windef.h里面定义的:typedefunsignedcharBYTE;二,char与 byte(JAVA)相同:c++中char型数组占一个字节。byte也占8个bit。不同:char 是字符型(-127 - 128;byte是字节型(0 - 255) .JAVA中byte类型的介绍:Java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。不幸的是,byte的用作计数的时间远少于用 阅读全文
posted @ 2013-08-15 17:33 CPYER 阅读(2226) 评论(0) 推荐(0)
摘要:以下对strcpy函数错误的是? 1 char atr1[]="string"; 2 3 char str2[10]; 4 5 char *str3; 6 7 char *str4="sting"; 8 9 10 A.strcpy(str1,"hello");11 B.strcpy(str2,"hello");12 C.strcpy(str3,"hello");13 D.strcpy(str4,"hello");C.strcpy(str3,"hello") 阅读全文
posted @ 2013-08-15 17:24 CPYER 阅读(477) 评论(0) 推荐(0)
摘要:类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BASIC 6.0 是典型的非面向对象的开发语言,但是它的确是支持类,支持类并不能说明就是支持面向对象,能够解决多态问题的语言,才是真正支持面向对象的开发的语言,所以务必提醒有过其它非面向对象语言基础的读者注意! 多态的这个概念稍微有点模糊,如果想在一开始就想用清晰用语言描述它,让读者能够明白,似乎不太现实,所以我们先看如下代码: 1 //例程1 2 #include 3 usin... 阅读全文
posted @ 2013-08-14 17:21 CPYER 阅读(855) 评论(0) 推荐(0)
摘要:1.什么是“引用”?申明和使用“引用”要注意哪些问题? 引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。 申明一个引用的时候,切记要对其进行初始化。 引用声明完毕后,不能再把该引用名作为其他变量名的别名。 声明一个引用,不是新定义了一个变量,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。 不能建立数组的引用。2.将“引用”作为函数参数有哪些特点? 传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就作为(原来主调函数中的实参变量或对象的)一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目... 阅读全文
posted @ 2013-08-14 11:37 CPYER 阅读(1436) 评论(0) 推荐(0)
摘要:简介:extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。含义:1.被extern限定的函数或变量是extern类型的: a.extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量 int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的。这涉 阅读全文
posted @ 2013-08-13 17:09 CPYER 阅读(1274) 评论(0) 推荐(1)