![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
xtf__moji
这个作者很懒,什么都没留下…
展开
-
static用法
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = A; // global variablevoid msg()转载 2010-02-22 20:51:00 · 861 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
原文链接:http://www.cnblogs.com/BlueTzar/articles/1223313.html对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 运行程序,屏幕输转载 2014-02-12 23:53:42 · 830 阅读 · 0 评论 -
strcpy和strncpy区别
第一种情况:char* p="how are you ?";char name[20]="ABCDEFGHIJKLMNOPQRS";strcpy(name,p); //name改变为"how are you ?\0OPQRS " ====>错误!strncpy(name,p,sizeof(name)) //name改变为"how are you ?转载 2014-02-25 20:29:55 · 766 阅读 · 0 评论 -
C++中的namespace
namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越拥挤,每个人都可能使用相同的名字来实现不同的库,于是程序员在合并程序的时候就会可能出现名字的冲突。namespace引入了复杂性,解决了这个问题。namespace允许像类,对象,函数聚集在一个名字下。本质上讲namespace转载 2014-02-25 20:09:13 · 702 阅读 · 0 评论 -
拷贝构造函数和赋值运算符
参考:http://www.cnblogs.com/xyl-share-happy/archive/2012/08/05/2623715.htmlC++自动提供的成员函数有:默认构造函数,复制构造函数,默认析构函数,赋值操作符,地址操作符即this指针,这五种函数如果用户没有定义,则系统会自动创建一个。复制构造函数:用一个对象复制一个新的对象时被调用,声明为:类名(const原创 2014-02-13 15:55:41 · 1281 阅读 · 0 评论 -
extern "c"解释
#ifdef __cplusplus 是什么意思?时常在cpp 的代码之中看到这样的代码:#ifdef __cplusplusextern "C" {#endif//一段代码#ifdef __cplusplus}#endif这样的代码到底是什么意思呢?首先,__cplusplus 是cpp 中的自定义宏,那么定义了这个宏的话表示这是一段cpp 的代码,也就是转载 2014-02-26 16:45:23 · 775 阅读 · 0 评论 -
c++和面向对象的笔试题
18. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?常考的题目。从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。重写:是指子类重新定义复类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对原创 2014-02-12 16:40:24 · 3712 阅读 · 1 评论 -
initialization list
原文链接:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题转载 2014-02-13 00:42:34 · 2447 阅读 · 0 评论 -
引用
C++实践 C++中的引用(reference)张笑猛2003年2月TOC1.简介2.引用的语法3.引用使用技巧 3.1 引用和多态 3.2 作为参数 3.3 作为返回值 3.4 什么时候使用引用4. 参考资料1.简介 引用是C++引入的新语言特性。从语意上来说,引用就是一个变量的别名,就转载 2014-02-13 17:19:43 · 666 阅读 · 0 评论 -
条件变量解惑
条件变量是用来等待而不是用来上锁的,通常条件变量和互斥锁同时使用。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。条件的检测是在互斥锁的保护下进行的。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。那么在另外的线程发出条件改变的信号之后呢?如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。(被唤醒原创 2014-02-16 17:05:00 · 775 阅读 · 0 评论 -
assert() 使用方法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#i转载 2014-02-17 22:57:51 · 1175 阅读 · 0 评论 -
test
test原创 2014-02-26 10:03:04 · 645 阅读 · 0 评论 -
C/C++野指针
一、莫名的恐惧感 对于指针确实有种莫名的恐惧感,从刚开始学习的时候就被老师灌输的概念是指针功能很强大,但是用得不够好,会有很大的副作用。什么叫用得够好?初学者谁都不会用,那且不是都不能用了?如果都这样,指针都没人用了,还要指针做什么? 陷入了上述困局的原因在于我们的这种莫名的恐惧感,指针如此之神秘,以至于如我一样大多数的人都望而生畏,无所适从,被迫放转载 2014-02-17 20:40:54 · 719 阅读 · 0 评论 -
线程同步题目
/*子线程循环5次,接着主线程循环10次,接着又回到子线程循环5次,接着再回到主线程又循环10次,如此循环6次,试写出代码。*/#include #include #include #include #include //如果只有一个mutex,在创建了子线程,主线程休眠后,让子线程执行,子线程执行了10次后,休眠。//过了这个休眠时间,调度线程执行的时候,如果系统任务多原创 2014-02-15 22:42:29 · 1042 阅读 · 0 评论 -
windows gdi 双缓冲
最近在写一个图像编辑软件,环境是MFC,但是MFC的视图刷新机制使得图像闪烁得非常厉害(图像缩放时尤其明显),在网上查了一些资料,最好的方法是用双缓冲的方式显示,这里总结一下。 双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)转载 2014-02-18 19:56:35 · 1104 阅读 · 0 评论 -
C++异常处理
引言异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题。而传统错误处理技术,检查到一个局部无法处理的问题时:1.终止程序(例如atol,atoi,输入NULL,会产生段错误,导致程序异常退出,如果没有core文件,找问题的人一定会发疯)2.返回一个表示错误的值(很多系统函数都是这样,例如malloc,内存不足,分配失败,返回NULL指转载 2014-02-19 22:38:43 · 778 阅读 · 0 评论 -
c++ 类型转换
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多态类转载 2014-02-12 16:04:17 · 655 阅读 · 0 评论 -
工厂模式
工厂就是你要什么去到工厂里拿就好了,工厂负责生产,你除了使用什么都不用管,小程序你看不出优势来,打个比方说如果12亿人人,一人一个电视,那么如果每个人都去工厂里制造是多么麻烦的事,你只要告诉他你要什么类型的,工厂会生产出来给你,这个就是通俗意义上的工厂模式了。至于说使用这个的好处,可以方便的更改应用程序,方便扩展。比如说你修改了一个类,或者在这个类的基础上生成了一个子类那么你现在要把以前使用父转载 2014-02-18 23:10:06 · 749 阅读 · 0 评论 -
预编译
预编译又称为预处理,是做些代码文本的替换工作 处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等 就是为编译做的预备工作的阶段 主要处理#开始的预编译指令 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。常见的预编译指令有: (1)#include 指令 该指令指示编译器将xxx.xx转载 2010-02-24 17:35:00 · 833 阅读 · 0 评论 -
const 修饰函数相关
看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书转载 2010-03-01 21:00:00 · 709 阅读 · 0 评论 -
VC学习笔记:ADO
步骤: 1.Import the ADO Dll#define INIGUID#import "C:/Program files/Common files/System/ADO/msado15.dll" no_namespace/rename_namespace("**") rename("","")uisng namespace **2.Initialize the COM原创 2010-03-12 23:16:00 · 791 阅读 · 0 评论 -
vc调试
概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据 自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜 单Open。设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWi转载 2010-05-11 11:58:00 · 551 阅读 · 0 评论 -
C语言基础1
<br />#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){/*printf(格式化输出):%[标志][输出最小宽度][.精度][长度]格式字符串标志 含义- 左对齐,右边填空格+ 输出符号(正好或者负号)空格 值为正,冠以空格;为负,冠以负号# 输出八进制十六进制的时候加前缀scanf(格式化输入):格式化说明符与printf()中的格式说明符基本相同原创 2010-09-20 12:32:00 · 584 阅读 · 0 评论 -
文件文件与二进制文件
<br /> 文本文件与二进制文件<br /> 一、文本文件与二进制文件的定义<br /> 大家都知道计算机的存储在物理上是二进制的,所以文本文件与二进制文件的区别并不是物理上的,而是逻辑上的。这两者只是在编码层次上有差异。<br /> 简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码)。<br /> 从上面可以看出文本文件基本上是定长编码的转载 2010-09-20 12:46:00 · 801 阅读 · 0 评论 -
VC中嵌入汇编
<br />#include <stdio.h>void __stdcall TranslateBuffer(char *buf,unsigned count,unsigned char eChar){ __asm{ pushad mov esi,buf mov ecx,count mov al,eCharL1: xor [esi],al inc esi loop L1 popad } //asm}int m原创 2010-09-21 20:54:00 · 1249 阅读 · 0 评论 -
窗口之间发送消息
.386 .model flat,stdcall option casemap:noneinclude windows.incinclude gdi32.incincludelib gdi32.libinclude user32.incincludelib user32.libinclude原创 2010-09-22 21:51:00 · 986 阅读 · 0 评论 -
C - Unions
原文网址:http://www.tutorialspoint.com/cprogramming/c_unions.htmA union is a special data type available in C that enables you to store different data types in the same memory location. You can defi翻译 2014-01-31 15:42:35 · 852 阅读 · 0 评论 -
大小字节序
原文链接:http://blog.csdn.net/iamlate/article/details/6844567不同的 CPU 有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序最常见的有两种1 . Little endian :将低序字节存储在起始地址2 . Big endian : 将高序字节存储在起始地址 基本知识,回顾一下原创 2014-02-07 19:30:15 · 1284 阅读 · 0 评论 -
c++ 常见笔试题
1.库函数strcpy的工作方式char * strcpy( char *strDest, const char *strSrc ) {assert((strDest != NULL) && (strSrc != NULL) );char*address = strDest; while((*strDest++ = * strSrc++) != ‘\0’ ); return转载 2014-02-17 20:34:19 · 1855 阅读 · 0 评论 -
面向“接口”编程和面向“实现”编程
英文原文:Program to an Interface, Fool 如果你已经读了我的前几篇关于面向对象范式因为受到 Rust, Go 等语言的影响而发生变化的文章,看到了我正在研究的 Rust 设计模式,你会发现我对 Rust 语言十分的偏爱。 除此之外,就在上周末,我读完了经典的《设计模式:可复用面向对象软件的基础》。这些种种,引起了我对这本书中谈及的一个核心原则的思考:转载 2014-02-20 23:51:26 · 882 阅读 · 0 评论 -
C++ 纯虚类
纯虚类有以下特征:含有一个纯虚函数的类,叫做纯虚类。纯虚类不可以定义对象。我个人觉得这个说法应该就是把纯虚类的主要特点说明了:1、只要有一个纯虚函数。就称为纯虚类。所以如果子类没有实现纯虚函数,相当子类也有纯虚函数,所以子类也是纯虚类。2、其他类的定义与使用方式都与一般的类差不多。大致有如下地方:纯虚类可以有成员变量 (可以)纯虚类可以有普通的成员函数(可以)纯虚类转载 2014-02-22 21:57:23 · 30881 阅读 · 1 评论 -
linux select()函数分析
原文链接:http://blog.csdn.net/zi_jin/article/details/4214359Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某转载 2014-02-08 19:12:55 · 1058 阅读 · 0 评论 -
关联,聚合,组合的区别及C++实现
类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己转载 2014-02-22 18:58:11 · 1062 阅读 · 0 评论 -
如何实现原子性
为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。现在我们把lock和unlock的伪代码改一下(以x86的xchg指令为例):lock: movb $0, %al xchgb原创 2015-02-01 23:16:44 · 1691 阅读 · 0 评论