05 2013 档案
摘要:Windows消息机制的流程: A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。 C. 应用程序调用DispatchMessage,将消息回传给操作系统。 D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。PreTranslateMessage作用和使用方法PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数...
阅读全文
摘要:1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。 2.对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。 3.因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。 4.C...
阅读全文
摘要:1、命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题。有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突。最典型的例子就是std命名空间,C++标准库中所有标识符都包含在该命名空间中。 如果确信在程序中引用某个或者某些程序库不会引起命名冲突(即库中的标识符不会在程序中代表其他函数名称),那么可以通过using操作符来简化对程序库中标识符(通常时函数)的使用,例如:using namespace std;那么就可以不用在标识符在前缀std::来使用C++标准库库中的函数了。 <iostream>和<ios
阅读全文
摘要:#include <iostream>using namespace std;class Enemy{public: Enemy(int damage = 10) { m_pDamage = new int(damage); } virtual ~Enemy() //定义虚拟析构函数,这儿有必要性,见下 { cout << "m_pDamage deleted\n"; delete m_pDamage; } void Taunt() const { cout << "The enemy says he will figh...
阅读全文
摘要:多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性)。而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,...
阅读全文
摘要:因为使用模板可以使程序员建立具有通用类型的函数库和类库。模板也是C++语言支持参数化多态性的工具。函数模板 函数模板能以同样的程序代码对不同类型的数据进行处理,其关键是将所处理的数据类型说明为参数,即类型参数化。 定义函数模板的一般形式是: template<class类型参数名1 ,class类型参数名2,…> 函数返回值类型 函数名(形参表) { 函数体 }说明: (1)这里的类型参数名就是代表形形色色数据类型的通用参数名,它可以代表基本数据类型,也可以代表类。 (2)编写函数模板的方法是:step 1:定义一个普通的函数,数据类型采用具体的普通的数据类型,仍以打印数...
阅读全文
摘要:1.extern的作用(附带const和static)const能定义常量,并且常量是有数据类型的,且可以调试。const还可以修饰函数形式参数、返回值和类的成员函数。static最主要的功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0;extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量或函数时在其他模块中寻找其定义。另外还可以做链接指示。static声明一个变量的作用(1)对局部变量声明,则为改变量分配的控件在整个程序执行期间始终存在;(2)对全局变量声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。静态局
阅读全文
摘要:可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信
阅读全文
摘要:这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中。继续使用过时的规则可不是个好的方法。从功能性的角度来讲,<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,<iostream>和<iostream.h>在接口和执行上都是不同的。最后,<iostream>的各组成都是以STL(Standard Template Library,标准模板库)的形式声明的,然而<iostream.h&
阅读全文
摘要:#include "stdio.h"#include "iostream"int main(){ char s[]="123456789"; char d[]="123"; strcpy(d,s); int a[]={1,2,3,4,5}; printf("%s,%s,%d",d,s,sizeof(a)); return 0;} 可以看出,不同数组的地址是按 从高到低的顺序给数组的首地址的。即越后面的数组的首地址越低。(5c+14(十六机制)=70)
阅读全文
摘要:1.故事的起源“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。2.什么是Big Endian和Little Endian?在设计计算机系统的时候,有两种处理内存中数据的方法。一种叫为little-endian,存放在内存中最低位的数值是来自数据的最右边部分(也就是数据的最低位部分)。比如某些文件需要在不同平台处理,或者通
阅读全文
摘要:#include "stdafx.h"#include <iostream> using namespace std; class Vehicle { public: Vehicle(float speed,int total) { Vehicle::speed=speed; Vehicle::total=total; } virtual void ShowMember() { cout<<speed<<"|"<<total<<endl; } virtual ~Vehi...
阅读全文
摘要:一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为:#ifdef 标识符程序段1#else程序段2#endif它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。其中#else部分也可以没有,即:#ifdef程序段1#denif在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。如你在头文件aaa.h中定义..
阅读全文
摘要:Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.STL中 end()指向的总是无效值,取值都用迭代器,用法跟指针差不多。assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 如果list是空的则返回true end() 返回末尾的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator() 返回list的配置器 insert() 插入一个元素到list中 max_size() 返回li
阅读全文
摘要:#include "stdafx.h" #include "stdio.h" #include #include "string.h" typedef int elemType ; /************************************************************************/ /* 以下是关于线性表链接存储(...
阅读全文
摘要:#include<iostream>#include<string>#include<list>using namespace std;//大整数相加 list<char> long_add(list<char> num1,list<char>num2);//大整数相减 list<char> long_sub(list<char>num1,list<char>num2);//大整数相乘list<char> long_mutliply(list<char>num1,
阅读全文
摘要:mylist.h //头文件struct node{ int idata_item; struct node *pnode;} //结点的定义class mylist{ private: //成员变量的说明 struct node* _at_front; struct node* _at_end; //定义该变量是为了链表的连结 int _size; public: struct node* get_front(){return _at_front;} struct...
阅读全文
摘要:Q:程序中A句实例化了抽象类OutputStream 怎么回事?抽象类不是不能实例化的么? import java.net.*; import java.io.*; public class TCPClient { public static void main(String[] args) throws Exception { Socket s = new Socket("222.91.106.117", 6666); OutputStream os = s.getOutputStream(); // A DataOutputStream dos = new DataOu
阅读全文