
c++
yuwei19840916
这个作者很懒,什么都没留下…
展开
-
c++中头文件,以及string的问题
1.#include 等同于 #include using namespace std; 不过最好还是用后者2.在使用string的时候,注意头文件的书写格式,否则容易出错。 e.g: #include #include using std::string; using std::cout; using std::endl;原创 2008-10-31 16:58:00 · 1014 阅读 · 0 评论 -
堆栈的区别
堆栈是系统使用是临时存储区域。它是后进先出的数据结构。C++主要将堆栈用于函数调用。当函数调用时,各种数据被推入堆栈顶部;函数终止后的返回地址、传递给函数的参数、函数返回的结果以及函数中声明的局部变量等等。因此当函数A调用函数B调用函数C,堆栈是增长了,但调用完成后,堆栈又缩小了。堆是一种长期的存储区域。程序用C++的new操作符分配堆。对new的调用 分配所需的内存并返回指向内存的指针。与堆栈不转载 2009-02-04 13:14:00 · 642 阅读 · 0 评论 -
类中静态变量的问题,以及构造函数的问题
#include using namespace std;class human{public: human() { human_num++; } static int human_num; ~human() { human_num--; print();原创 2008-11-28 16:12:00 · 524 阅读 · 0 评论 -
链表重复元素的统计
有三个非递减的链表,要求将重复的元素重新置于a链表中,并且其复杂度为O(n+M+P)#include #include using namespace std;void main(){ int a[10]={1,7,8,8,9,9,11,14,15,19}; int b[8]={0,1,5,7,11,15,15,19}; int c原创 2008-11-28 19:32:00 · 982 阅读 · 0 评论 -
匿名管道、命名管道
管道分为两种类型:匿名管道(UnnamedPipe)和命名管道 (NamedPipe)。匿名管道是不命名的,它用于本地系统中父进程与 它启动的子程序之间的通信。而命名管道由一个名字来标识,以使 客户端和服务端应用程序通过它可以进行彼此之间的通信。只有在 Windows NT中才能真正实现命名管道 ,邮路(Mailslot)是一种远程系统进程之间进行通信的理想方式。原创 2008-11-29 17:33:00 · 665 阅读 · 0 评论 -
union联合
“联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。如前面介绍的“单位”变量, 如定义为一原创 2008-12-03 10:25:00 · 1746 阅读 · 0 评论 -
基础知识
1、头文件中的 ifndef/define/endif 干什么用?答:防止该头文件被重复引用。2、#include 和 #include “filename.h” 有什么区别?答:对于#include ,编译器从标准库路径开始搜索 filename.h对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h3、const 有什么用途?(请至转载 2008-12-02 11:21:00 · 502 阅读 · 0 评论 -
#ifndef、#define、#endif
你所遇到的这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #e转载 2008-12-02 21:48:00 · 552 阅读 · 0 评论 -
高质量编程
请写出 BOOL flag 与“零值”比较的 if 语句标准答案:if ( flag )if ( !flag )如下写法均属不良风格,不得分。if (flag == TRUE)if (flag == 1 )if (flag == FALSE)if (flag == 0)请写出 float x 与“零值”比较的 if 语句标准答案示例:const float EPSINON = 0.0000原创 2008-12-01 20:44:00 · 460 阅读 · 0 评论 -
同步异步
同步方式和异步方式用函数是说不清楚的,同步(异步)方式是一种机制。同步方式是指必须得到确认之后才能进行下一个事件,就是的阻塞摸式,如TCP,异步方式则不需要,即非阻塞摸式,如UDP原创 2008-12-03 19:44:00 · 376 阅读 · 0 评论 -
CLIST
CList类的两个参数什么意思啊?第一个参数表示链表中存储的数据类型,后面一个表示链表类中函数参数的传递方式,通常为存储数据类型的引用。CList MyList_x;CListMyList_y;//两种方式实现的功能一样,不过后面一个更加高效。CList list;声明方式就是错误,CList list1;CList list2;CList list3;都是可以接受的声明方式。转载 2008-12-03 20:09:00 · 588 阅读 · 0 评论 -
CString的GetBuffer(0)中的“0”的作用
获得CString字符串0位置的指针地址原创 2008-12-03 19:35:00 · 2976 阅读 · 2 评论 -
CONST 指针
1.指针的理解:const char*, char const*, char*const的区别问题几乎是C++面试中每次 都会有的题目。 事实上这个概念谁都有只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 constchar * const cp; ( * 读成 pointe原创 2008-12-04 11:31:00 · 693 阅读 · 0 评论 -
strcpy实现
编写strcpy 函数已知strcpy 函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串。(1)不调用C++/C 的字符串库函数,请编写函数 strcpychar *strcpy(char *strDest, const char *strSrc);{ assert((str原创 2008-12-08 11:28:00 · 649 阅读 · 0 评论 -
string 实现
已知类String 的原型为:class String{ public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); //原创 2008-12-08 13:59:00 · 442 阅读 · 0 评论 -
高质量编程
1.类型转换:由于派生类和基类之间的关系,C++保证了派生类对象必须保证其基类子对象的完整性.2.强制转换: 例子:double d3=1.25e+20; double d4=10.35; int i2=(int)d3; int i3=(int)d4; 上述代码的问题,i2会溢出,doubl原创 2009-02-17 21:41:00 · 660 阅读 · 0 评论 -
基本题
求下面函数的返回值(微软)int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); //每进行一次与运算,就减少一个1 } return countx; } 假定x = 9999。 答案:8转载 2008-12-09 17:30:00 · 527 阅读 · 0 评论 -
vector的访问的探讨
void f(vector& v){ v[0]; //A v.at(0); //B}上述A、B均是对Vector中的0位置的元素进行访问,其结果可能不一致。 当V为非空时,两者一致,当V为空时,则不一致了。 理由:A这种访问方式是vector::operator,其不进行越界检查 B这种访问方式是vector::at,其要求进行越界访问,抛出std::out_of_range异常原创 2008-11-22 17:13:00 · 586 阅读 · 0 评论 -
template的简单例子
#include using namespace std;template class T>int compare(const T &v1,const T &v2){ if(v1==v2) return 0; if(v1>v2) return -1; if(v1 return 1;原创 2008-11-22 22:23:00 · 477 阅读 · 0 评论 -
VC++中"using namespace std"的用处
std 是一个命名空间.. 不同的命名空间可以有相同的类名被定义 .. using namespace std; 就是指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的 也可以在全局空间中定义,只要名字空间不一样即可..).. 否则可以默认名字空间中有std.便不用std::来修饰 它是C++新标准中有的,解决多人作编大程序时名字冲突问题。原创 2008-11-22 20:00:00 · 609 阅读 · 0 评论 -
Pair的使用,以及typedef的使用,make_pair的使用
1.首先要声明头文件 using std::pair;2.typedef的使用3.make_pair 使用需引入using std::make_pairE.G: #include #include #include using std::string;using std::cout;using std::endl;using std::pair;usi原创 2008-11-01 15:00:00 · 15976 阅读 · 1 评论 -
关联、聚合、组合
关联、聚合(Aggregation)以及组合(Composition)的区别?涉及到UML中的一些概念:关联是表示两个类的一般性联系,比如“学生”和“老师”就是一种关联关系;聚合表示has-a的关系,是一种相对松散的关系,聚合类不需要对被聚合类负责,如下图所示,用空的菱形表示聚合关系: 从实现的角度讲,聚合可以表示为:class原创 2008-12-29 20:16:00 · 761 阅读 · 0 评论 -
COM技术浅析
一、COM是一个更好的C++1、COM 是什么Don Box 说"COM IS LOVE"。COM 的全称是 Component Object Model 组件对象模型。 2、从 C++ 到 DLL 再到 COM2.1 C++如某一软件厂商发布一个类库(CMath四则运算),此时类库的可执行代码将成为客户应用中不可分割的一部分。假设此类库的所产生的机器码在目标可执行文件中占有4MB的空间。当三个应转载 2008-11-08 10:07:00 · 458 阅读 · 0 评论 -
指针
int *p[n] 指针数组,每个元素均为指向整型数据的指针int (*)p[n] P为指向一维数组的指针,这个一维数组有N个整型数据int *p() 函数P()的返回值为指向整型数据的指针int (*)p() P为指向函数的指针原创 2008-11-18 14:29:00 · 425 阅读 · 0 评论 -
const * 区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to ) cp is a co原创 2008-11-18 14:23:00 · 491 阅读 · 0 评论 -
strlen 和sizeof的用法
#include using std::cin; using std::cout; using std::string; using std::endl; void fun(char str[100]) { str="nihaowoyehao"; char str1[100]="nihaowoyehao"; coutsizeof(str)/原创 2008-11-14 22:07:00 · 516 阅读 · 0 评论 -
STRCPY,MEMSET,MEMCPY三者的区别
memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ 或‘/0;例:char a[100];memset(a, /0, sizeof(a)); memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的原创 2008-11-18 14:40:00 · 795 阅读 · 0 评论 -
break/return区别
break 仅仅是跳出当前一级循环 而 return 从函数体内返回,结束函数原创 2008-11-19 10:29:00 · 349 阅读 · 0 评论 -
vc6.0调试问题
fatal error C1083: Cannot open precompiled header file解决方法:删除工程中的Debug文件原创 2008-11-20 20:16:00 · 455 阅读 · 0 评论 -
ASSERT()函数功能
ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。例如,变量n在程序中不应该为0,如果为0可能导致错误,你可以这样写程序: ...... ASSE原创 2008-11-21 11:28:00 · 1092 阅读 · 0 评论 -
析构函数和虚函数的用法和作用
析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。有释放内存空间的做用!虚函数是C++多态的一种表现 例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。 如果父类的函数(方原创 2008-11-21 11:46:00 · 4229 阅读 · 0 评论 -
C++中的4种类型转换方式
C++中的4种类型转换方式static_cast 静态的_cast dynamic_cast 动态的_cast reinterpret_cast 重新解释的 _cast const_cast 常量的_cast C++ 里最好杜绝使用 C 方式的强制转换, 换用以上 4 个. 我们通常用的是 static_cast 在一类东西都可以转, 但是不是一类的就不能转. 即, 语义上说不通的, 两个完全不同转载 2009-01-13 22:25:00 · 999 阅读 · 0 评论 -
调用约定
调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定: _cdecl 按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于“C”函数或者变量,修饰名是在函数名前加下划线。对于“C++”函数,有所不同。 如函数void test(void)的修饰名是_test;对于不属于一个类的“C+转载 2008-11-20 20:02:00 · 382 阅读 · 0 评论 -
指针和句柄的区别
你朋友给你写信,他直接写你名字邮局是找不到你的,他就写出你家的门牌号,邮局通过门牌就能找到你了,那么门牌就是指针,而你本身就是指针指向的内存值. 你由于去砸110车窗户被关进局子(打比方呵呵,别打我~),和你一起的有老外,有外星人,大家名字都很长,很难记,监狱长为了方便,给每个犯人一个标号,比如你是0001,而另一个火星人是0002,那么以后监狱长碰到0001就知道是你了,不会去找火星人麻烦的.那原创 2008-11-21 20:31:00 · 466 阅读 · 0 评论 -
malloc/free和new/delete
有了malloc/free 为什么还要new/delete ?malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象在消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符转载 2009-01-13 22:11:00 · 531 阅读 · 0 评论 -
UDP连接实现
服务器端代码:#include #include void main(){ //load socket WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(1,1); err=WSAStartup原创 2008-11-19 15:55:00 · 752 阅读 · 0 评论 -
图文例解C++类的多重继承与虚拟继承
在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例原创 2008-12-12 10:00:00 · 567 阅读 · 0 评论