- 博客(28)
- 资源 (6)
- 收藏
- 关注
转载 一、进制数
比较常用的数制是十进制、二进制、八进制和十六进制。二进制就是逢二进一,每位都是小于二的数,其他进制类推。计算机存储数据使用的是二进制编码。 对于一个R进制的数X来说,其值可以通过下面的公式算出来:,前面是整数部分,后面是小数部分,m,n为正整数,表示第i位上的数字乘以进制数的i次方。比如二进制数(11.01)2=1×21+1×20+0×2-1+1×2-2=3.25。当R进制转
2015-03-31 16:49:09 668
原创 0、Windows基础
1.11 win2.0增强了键盘和鼠标接口,特别是加入了菜单和对话框。 GUI是个人计算机工业史上集各方面技术大成于一体的重要产物。 Windows上执行的程序可共享「动态链接库」的文件中的例程。 Windows包括一个机制,能够在执行时连结使用动态链接库中例程的程序。 Windows自身基本上就是一个动态链接库的集合。1.12 windows运作机制的核心是一个“动态链接”的概念,w
2015-03-31 14:12:54 419
原创 8.1、鼠标
一、鼠标基础 通常我们认为键盘便于输入我操作文字数据,而鼠标便于画图和操作图形对象。我们可以使用GetSystemMetrics函数来确认鼠标是否存在,该函数具体请查阅MSDNfMouse=GetSystemMetrics(SM_MOUSEPRESENT);同样,确定鼠标上按键个数:cButtons=GetSystemMetircs(SM_CMOUSEBUTT
2015-03-30 14:59:30 494
转载 解决外部符号错误:_main,_WinMain@16,__beginthreadex
(转)error LNK2001: unresolved external symbol _main解决办法解决外部符号错误:_main,_WinMain@16,__beginthreadex 在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有柚煤孟钅坎问? 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: libcmt
2015-03-28 10:05:19 390
翻译 条款43、学习处理模版化基类内的名称
考虑以下代码,功能为发送不同信息至不同部门,采用模版方法。class CompanyA{ public: void sendClearT(const std::string&msg); void sendEncrypt(cons std::string& msg);};class CompanyB{ public:
2015-03-27 15:54:24 386
转载 7.1、键盘
键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。1.1输入方式:以消息的形式传递给程序的窗口处理过程。Windows用8种不同的消息来传递不同的键盘事件。这好像有点多,但是程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。 1.2扫
2015-03-26 14:54:35 623
转载 MFC中OnDraw与OnPaint的区别
OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。OnPaint()是CWnd的类成员,负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,没有响应消息的功能.当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows发送WM_PAINT消息。该视图的OnPaint 处理函数通过创建
2015-03-26 14:47:43 514
翻译 条款42、typename的双重意义
如下:templateclass Widget; //使用”class”templateclass Widget; //使用”typename”虽然使用了不同的关键字,但从C+的角度来说,声明模板参数时,关键字class 和typename意义完全相同。然而C+并不把class和typename视为等价。有时你一定得使用typename. 考虑下面一个函数模版,接受一个STL兼容
2015-03-25 19:10:35 539
原创 构造函数调用顺序
#include<iostream>using namespace std;class Base{public: Base(int i) {cout<<i; cout<<"Base调用"<<endl;}};class Base1:virtual public Base{public: Base1(int i,int j=0):Base(j){cout<<i; cout<
2015-03-25 09:13:14 404
翻译 条款41、隐式接口和编译期多态
C++ template最初的发展动机:建立“类型安全type safe”的容器如vector,lis,map.后面随着使用的增多,我们发现模版有能力完成更多可能的变化。 容器虽好,但泛型编程(generic programming)更好:代码和其所处理的对象类型彼此独立。STL算法如for_each,find等就是这类编程的成果。 于是导出了模板元编程(tmplate metaprogr
2015-03-24 19:17:42 470
原创 6.1、GDI映射模式
一、设备坐标和逻辑坐标在Windows应用程序中,有两种坐标系统:设备坐标和逻辑坐标。 设备坐标:又称物理坐标,指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标,以像素为度量单位。水平轴(X轴)的正方向从左向右,垂直轴(Y轴)的方向从上向下,并且整个坐标轴的单位和方向固定不变。windows包括三种设备坐标,以满足不同需要:1、客户区坐标 2、全窗口坐标 3、屏幕坐标 逻辑坐
2015-03-23 15:42:22 668
翻译 条款40、明智地使用多重继承
现在考虑多重继承MI(multiple inheritance)。程序可能从一个以上的基类继承相同的名称(如函数 typedef等)。那会导致较多歧义。考虑以下代码:class A{ public: void fun();….};class B{ private: bool fun()const;};cla
2015-03-21 15:06:25 442
转载 5.2、双缓冲绘图
一、双缓冲原理 我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。为了解决这个问题,我们利用双缓冲技术进行绘图。所谓双缓冲技术,就是将资源加载到内存,然后复制内存数据到设备DC(比较快),避免了直接在设备DC上绘图(比较慢)。我们可以把windows桌面比作一个黑板.1、Windows 绘图原理 我们在 Windo
2015-03-20 16:22:44 554
转载 5.1、GDI图形接口
一、GDI简介 GDI(GraphicsDevice Interface),即图形设备接口。主要负责系统与绘图程序之间的信息交换,处理所有Windows程序的绘图输出。 在window操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI提供的函数就可以方便的在屏幕、打印机等输出设备输出图形,文本等操作。GDI使程序员无需关心硬件设备及驱动,就可以将应用程序的输出转换为硬
2015-03-20 09:11:26 905
翻译 条款39、明智审慎地使用private继承
TK32论证了public继承是is-a关系。类student继承自类Person。于是在编译必要时student暗自转变为Person。现在考虑private继承:class Person{….};class Student:private Person{….};void eat(const Person& p); //任何人都会吃void study(const Stude
2015-03-19 19:22:47 752
转载 4.2、消息映射机制原理
一、消息映射原理 SDK中每个窗口类都有一个窗口过程,与之不同的是:所有MFC窗口都有一个默认的窗口过程。SDK中没有消息映射的概念,它有明确的回调函数,通过一个switch语句去判断收到的消息然后进行消息处理。对于消息映射,这里有不同的几种猜想: 1、最直截了当的想法是、消息映射就是用一个数据结构把“消息”和“响应函数”串连起来,当窗口感知消息时,就对结构进行查找,找到相应的消息
2015-03-18 16:53:00 474
翻译 条款38、根据复合塑模has-a或“根据某物实现出”
复合(compsition)是这样一种关系:某种类型对象内含其他类型对象。如:class Address{….};class PhoneNun{…};class Person{ private: //合成物成分 std::stringname; PhoneNum phone; Address addr;};上面Person对象由其他三部
2015-03-18 16:43:55 547
翻译 条款36、绝不重新定义继承而来的缺省参数值
为简化问题,只能定义两种函数:虚函数和非虚函数。从前面我们知道,重定义继承而来的非虚函数永远是错误的。所以我们讨论“继承一个带有缺省参数值的虚函数”。 理由十分明确:1、虚函数系动态绑定(又称前期绑定) 2、缺省参数值是静态绑定(后期绑定)。对象的所谓静态类型,就是它在程序中被声明时所采用的类型。考虑以下:class Shape{ public:enum S
2015-03-17 10:43:56 699
翻译 条款36、绝不重新定义继承而来的非虚函数
考虑以下代码,D公有派生自B,B有一个成员函数mf.class B{public:void mf();…};class D: public B{…};D x; //D类对象B* pb=&x; //行为1pb->mf();D* pd=&x; //行为2pd->f(); 很明显行为1、2调用会相同,都是基类的mf,理应如此。但如果mf是非虚函数,而且D有定义自己的m
2015-03-14 15:39:13 659
翻译 条款35、考虑虚函数以外的选择
假设一个人物类,它有一个表现健康程度的的成员函数heath,返回一个数值表示人物健康程度。不同人物可能有不同的计算健康程度的方法,将其声明为虚函数是再明白不过的方法:class Character{public: virtual int heath () const; //返回健康指数,派生类可重载…} health方法未声明为纯虚,暗示有计算健康指数的缺省方法。这个
2015-03-14 10:07:44 406
转载 4.1内部运行机制-消息映射
一、一些基本概念1、几个重要头文件afx.h 绝大部分类的声明头文件afxwin.h 包含了afx.h和windows.hafxext.h -提供了扩展窗口类的支持(工具栏,状态栏等2、使用MFC做自己的库程序(MFCAppWizard dll)规则动态库:可以被任意程序调用扩展动态库:只能被支持MFC的程序调用3、MFC窗口程序
2015-03-13 16:24:47 571
翻译 条款34、区分接口继承和实现继承
public继承由两部分组成:函数接口继承和函数实现继承。 设计类时,我们有不同的需求:1、Derived只继承成员函数的接口(也就是声明) 2、Derived同时继承接口和实现,但又能覆写继承的实现(override) 3、Derived同时继承接口和实现,但不允许覆写任何东西。为表现上面的差异,考虑以下代码:class Shape{public: virtu
2015-03-13 14:56:39 478
转载 2015产品校招——阿里腾讯百度360小米面经
导语:本文作者也是今年的一位应届生,经历过了校招找工作的波折与纠结,在此分享下自己的经验与教训。希望分享的经验可以帮到还在找工作的童鞋以及学弟学妹们。 校招按过程可以分为网申阶段、笔试阶段和面试阶段,此外还有内推以及实习转正这些额外的方式。所有这些公司都是实习留下来的话几率最大,所以强烈推荐先去找份实习。有了实习经验再找工作也会容易很多~ 1.阿里巴巴 网申阶
2015-03-11 15:19:20 1390
翻译 条款33、避免遮掩继承而来的名称
我们都知道,内层作用域会掩盖外层作用域的名称。至于名称类型是否相同并不重要,如x的int掩盖x的double. 现在引入继承,当派生类成员函数涉及基类的某物(成员函数,typedef,或成员变量),编译器可以找出所涉及的东西,派生继承了声明于基类的所有东西,实际运作方式是:Drived作用域嵌套于Base类作用域内。如下:class Base{private: int
2015-03-11 12:02:43 395
翻译 条款32、确定你的public继承塑模出is-a关系
bublic继承意味着“is-a”关系。即一个D类对象(Derived)同时也是一个B类对象(Base)。反之则不成立。B相比D更一般化,而D相对B更特殊化。考虑如下:class Person {…};class student: public Person{…}; 承上,C+中任何函数期望获得类型Person(指针或引用)的实参,也愿意接受Student对象(指或引)、void eat
2015-03-10 20:32:06 484
翻译 条款31:将文件间的编译依赖关系降至最低
假设修改calss的实现文件,不是修改class接口,只是实现中的private成分。然后你会发现全部编译和重新连接了。这些问题是因为C++没有“将接口从实现中分离”做得足够好。class的定义不只是描述了class接口,还包括实现细节。如下代码:class Person{ public: Person(conststring& nam
2015-03-10 09:39:51 487
翻译 条款30:透彻了解inlining的里里外外
inline函数比宏好用得多(TK2),编译器通常被设计用来浓缩那些“不含函数调用”的代码,所以编译器有力能对inline函数执行语境相关最优化。 但inline也有另一面,对函数调用都以函数本体替换之,会增加目标代码的大小(object code)。在内存有限的环境中,造成的代码膨胀会导致换页行为,导致效率损失。换言之,如果inline函数本体很小,编译器针对“函数本体”产生比“函数调用
2015-03-08 15:05:25 402
翻译 条款29:为“异常安全”而努力是值得的
考虑一个背景图案GUI菜单类,运用于多线程环境。以mutex(互斥器)作为并发控制。如下代码:class Menu{ public: ... voidchangeBG(std::istream& imgSrc); //改变背景 ... priv
2015-03-07 21:44:23 365
Visual AssistX for VS2017
2019-01-22
深入应用C++11 代码优化与工程级应用完整版 pdf
2018-02-27
FileTool.ext
2014-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人