摘要:
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片, 阅读全文
随笔分类 - C/C++编程
C++管理指针成员
2012-08-24 16:29 by javaspring, 239 阅读, 收藏,
摘要:
1、C++中一般采用下面三种方法之一管理指针成员: (1)指针成员采取常规行为。这样的类具有指针的所有缺陷:具有指针成员且使用默认复制构造函数和赋值操作符,无法避免悬垂指针(两个对象的指针成员指向同一内存,删除了其中一个指针指向的内存时,另一个指针将不再指向有效的内存空间)。 (2)类可以实现所谓的"智能指针"行为。引入计数类,智能指针类将一个计数器与类的对象相关联。使用计数跟踪该类有多少个对象共享同一指针。当计数为0时,删除对象。 (3)类采取值行为。采用重载的复制构造函数、赋值操作符和析构函数。2、指针成员采取常规行为示例:两个指针指向同一块内存,会引起不可预料的后果# 阅读全文
C++顺序容器vector、deque、list
2012-08-24 15:08 by javaspring, 381 阅读, 收藏,
摘要:
1、容器元素类型 C++中大多数数据类型可以作为容器的元素类型。容器元素类型必须满足一下两个条件:支持赋值和复制操作。 所以没有元素是引用类型的容器,同时IO对象和auto_ptr也不能作为容器的元素类型。2、vector容器的自增长 vector容器中存储的元素在内存中是连续存储的。假如容器中没有空间容纳新元素,此时由于元素必须连续存储以便索引访问,所以不能在内存中随便找个地方存储这个新的元素,于是vector必须重新分配空间,用于存放原来的元素和新添加的元素:存放在旧容器中的元素被复制到新的容器中,接着插入新的元素,最后撤销旧的存储空间。为了使vector容器实现快速的内存分配,其实际分配 阅读全文
获取窗口句柄
2012-08-24 12:26 by javaspring, 2370 阅读, 收藏,
摘要:
1、使用FindWindow函数获取窗口句柄示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置。#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h> int main(int argc, char* argv[])
{ //根据窗口名获取QQ游戏登录窗口句柄 HWND hq=FindWindow(NULL,"QQ2012"); //得到QQ窗口大小 RECT rect; Ge 阅读全文
C/C++内存分配
2012-08-23 17:09 by javaspring, 197 阅读, 收藏,
摘要:
1、c/c++内存分配1、栈区:由编译器自动分配和释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区:一般由程序员分配和释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事。3、全局(静态)数据区:全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。4、文字常量区:常量字符串存放在这里,程序结束后由系统释放。5、程序代码区:存放函数体的二进制代码。2、下面是一段实际说明的代码#include "stdafx.h"
#include < 阅读全文
类String的构造函数、析构函数和赋值函数
2012-08-22 09:52 by javaspring, 449 阅读, 收藏,
摘要:
1、代码如下: 注意:形参加上const修饰符,函数体里面判断参数是否为NULL,引用不能为空等。 复制操作符应该判断是否是自赋值。 重载输入操作符时,要注意给data分配足够的空间,现在还没有想到太好的办法,用的是临时变量,这里一直不是很明白C++中的(string s; cin>>s;)到底最大可以读取多少个字符,其原理又是怎么实现的呢。 友元函数有时候编译器会有bug,解决方法如下:事先声明类和友元函数(在类外面不能用friend 关键字) class String; ostream& operator<<(ostream& out,const S 阅读全文
句柄
2012-08-21 21:55 by javaspring, 462 阅读, 收藏,
摘要:
1、句柄概念 句柄,是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个四字节长的数值,来标示应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows使用了大量的句柄来标志很多对象。 WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWS API给这 阅读全文
运算符重载
2012-07-28 23:10 by javaspring, 378 阅读, 收藏,
摘要:
1、赋值运算符=2、等于运算符==3、加法运算符+4、前向自加运算符++5、后向自加运算符++6、下标运算符[ ]7、输入输出运算符<< 和 >>8、转换运算符( )9、实例代码#include <stdio.h> #include <stdlib.h>
#include <iostream>
using namespace std; class A;
ostream& operator<<(ostream &out,A &a);
istream& operator>>(istr 阅读全文