【C++】
文章平均质量分 65
yangywyangyw
认真,勤奋,脚踏实地!
展开
-
眼过千遍不如手过一遍——做MFC规则的可共享(shared)DLL
<br />!看文章不仔细,导致自己在这个问题上停留了5个小时! 贴代码。<br /> <br />新建MFC可共享DLL,新建一对话框CDLLDLG,在CXXXAPP.cpp里面添加如下函数<br /> <br />extern "C" void _declspec(dllexport)showdlg(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); //一定要加上这句,害我折腾了5个小时! CDLLDLG dlg; dlg.DoM原创 2010-10-27 02:09:00 · 1135 阅读 · 0 评论 -
从一个小程序来看C++类的存储方式
先来看下例:#includeusing namespace std;class tryinstance{ int a; double b; float c;public: int printout() { cout程序的输出结果为:这个没什么意外,sizeof(try1)的大小为4+空4+8+4+空4=24个字节;问题是函数既然是类的成员函数,为什么不占用大小?在我看来,其实每个成员函数并非为某个对象所有,而是全体类对象所有,每个对象都有一个隐含的原创 2010-10-26 02:09:00 · 778 阅读 · 0 评论 -
眼过千遍不如手过一遍——简单动态链接库的编写
链接库文件TestDLL.h#pragma onceextern "c" int _declspec(dllexport)add(int ,int);//注意这里不能是_stdcall,否则编译出错,具体原因我也不知呀!链接库文件TestDLL.cpp#include "TestDLL.h"int add(int a,int b){ return a+b;}测试链接文件testlink.cpp#include#includetypedef (*inport)(原创 2010-10-26 16:30:00 · 1953 阅读 · 0 评论 -
眼过千遍不如手过一遍——静态链接库的编写
<br />链接库TestSLL头文件:<br /> <br />#pragma onceextern "c" int add(int a,int b);<br />链接库TestSLL源文件<br /> <br />#include "TestSLL.h"int add(int a,int b){ return a+b;}<br /> <br />实现链接文件main.cpp<br /> <br />#include<iostream>#include ".../Tes原创 2010-10-26 16:02:00 · 836 阅读 · 0 评论 -
C/C++内存对齐
一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构原创 2010-10-06 03:20:00 · 597 阅读 · 0 评论 -
C++ primer 读书笔记系列——(6)顺序容器
顺序容器类型:顺序容器:vector 支持快速随即访问list 支持快速插入/删除deque 双端队列顺序容器适配器:stack 先进先出栈(LIFO)queue 先进先出(FIFO)priority_queue 有优先级管理的队列未完待续.原创 2010-09-03 22:27:00 · 588 阅读 · 0 评论 -
C++ primer 读书笔记系列——(7)关联容器
关联容器和顺序容器的区别为:关联容器通过键来存储和读取元素,而容器通过元素在容器中的顺序位置来访问和存储元素。两个基本的关联容器类型是map和set,map的元素以键-值对的形式存储:键用作元素在map中的索引,而值则表示存储的元素。set紧包含一个键,并有效地支持关于某个键是否存在的查询。关联容器类型:map 关联数组:元素通过键来存储和读取set 大小可变的集合,支持通过键来实现快速读取multimap 支持同一个键多次出现的map类型multiset原创 2010-09-09 03:23:00 · 732 阅读 · 0 评论 -
C++ primer 读书笔记系列——(6)顺序容器(三)之再谈string类型和容器适配器
(一)再谈string类型string类型支持大多数顺序容器操作,在某些方面,可将string类型视为一种字符容器。但string类型与vector容器不同的是,它不支持以栈方式操纵容器:在string类型中,不能使用front,back,pop_front,pop_back。string支持的其它容器操作有:*长度操作size;*下标操作;*erase和clear操作;*赋值操作;*capacity和reserve操作 等。原创 2010-09-05 23:55:00 · 1087 阅读 · 0 评论 -
C++ primer 读书笔记系列——(6)顺序容器(二)
(一)删除容器内元素:c.erase(p) 删除迭代器p所指向的元素c.erase(b,e) 删除迭代器b和e所指向的范围内的元素c.clear() 清空c中所有元素c.pop_back() 删除容器c的最后一个元素c.pop_first() 删除元素的第一个元素#include#include#includeusing namespace std;int main(){ list ivec原创 2010-09-04 23:54:00 · 789 阅读 · 1 评论 -
C++编译时的多态与运行时的多态
<br />所谓多态性是指不同对象收到相同消息时产生不同动作。通俗的说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的动作。即用同样的接口访问功能不同的函数。<br /> <br />在C++中,多态性的实现和联编这一概念有关。一个源程序经过编译,链接,成为可执行文件的过程是把可执行代码连接在一起的过程。其中在运行之前就完成的联编成为静态联编,在运行时才完成的联编叫做动态联编。<br /> <br />静态联编也称为编译时多态性。主要通过函数重载和运算符的重载来实现。<br /> <br /原创 2010-09-01 19:50:00 · 3940 阅读 · 0 评论 -
C++ primer 读书笔记系列——(3)C++中的数组和指针
c++语言提供了两种类似于vector和迭代器类型的低级符合类型——数组和指针。与vector类似,数组也可以保持某种类型的一种对象,而他们的区别在于,数组的长度是固定的,数组一经创建,就不允许添加新的元素,指针则可以像迭代器一样遍历和检查数组中的元素。 现代c++程序应尽量使用vector和迭代器两种类型,而避免使用低级的数组和指针,设计良好的程序只有在强调速度时才在类内部使用数组和指针! 数组是C++中类似于标准库vector的内置数据结构。与vector类似,数组也是一种存储原创 2010-08-29 22:11:00 · 627 阅读 · 0 评论 -
C++ primer 读书笔记系列——(8)类和数据抽象
好几天没更新博客了,总感觉没什么可更新的了,因为书中后面几章我还都掌握的不错,毕竟以前学过C++基础语法的。 昨天看了一篇文章,里面提到:对于经典的书籍,不要以为哪一章你以前学过了就直接跳过去不看了。我觉得说的还颇有道理的,今天继续翻开这本C++ primer了。 不过现在的文章和以前有很多不同了。 以前总想把很多东西都详细的记下来,可能是因为自己的求全心吧。 实际上,要想写详细写全些的话很费时间的,我总感觉我可以用这些时间来干些其它的事儿。所以我打算以后的文章会尽量写的简明扼要。越来越感觉时间过的快了,开原创 2010-09-11 16:02:00 · 521 阅读 · 0 评论 -
C++ primer 读书笔记系列——(1)标准库string类型
<br />与其它标准库一样,使用string类型对象,必须包含相关头文件。如果提供了合适的using声明,则编出来的程序相对简洁些:<br />#include<string><br />using std::string;<br /> <br />(一)string的初始化的几种形式:<br /> <br />string s1; // 默认构造函数,s1为空串<br />string s2(s1); //将s2初始化为s1的一个副本<br />string s3("value"); //将s3初始化为原创 2010-08-29 19:58:00 · 487 阅读 · 0 评论 -
C++ primer 读书笔记系列——(2)标准库vector类型
vector是一个类模板,我们把vector称为容器。和标准库string类似,使用vector前,必须包含相应的头文件:#includeusing std::vector;(一)vector对象的定义和初始化vector 类模板定义了好几种构造函数,用来定义和初始化vector对象。vector v1 vector保存类型为T的对象,默认构造函数v1为空。vector v2(v1) v2是v1的一个副本,调用拷贝构造函数。vector v3(n,i) v3包含n个值为i的元素。vector原创 2010-08-29 21:50:00 · 510 阅读 · 0 评论 -
多线程编程——几种线程同步机制
先来看看一般的多线程共用一个资源的情况:#include "stdafx.h"#include "windows.h"const int 100;int workID=10;DWORD threadfunone(LPVOID lParam){ for(;;) { workID+=1; Sleep(1000); printf("the workID of threadfunone is:%d/n",workID);原创 2010-10-30 00:13:00 · 1026 阅读 · 0 评论