从Java到C++ 对比Java与C++编程的不同
1. 数据类型和变量 C++ 中的变量类型与Java很相似。像Java一样,C++ 有int 和 double 类型。但是这些数字类型的取值范围是依赖于机器的。比如在16位系统上,例如运行DOS 或Windows 3.x的PC机上,int 是双字节(2-byte)的,取值范围比Java的4-byte的int 要小很多。在这些机器上,如果 int 不够用的话,你需要使用长整型long. C++ 有 short 和 unsigned 类型来更有效的存储数字。(我认为所谓有效是指更高的空间利用率。) 最好是尽...
C++基础知识:限制类对象生成的数量
限制类对象生成的数量,如果我们需要的数值不是“1”,而是某个其它的某个值怎么办?最容易想到的办法是通过添加静态控制变量--计数器来达到目的。假设我们需要为打印机设计一个类,首先可能会这样设计: class Printer{ public: class TooManyObjects{}; // 当需要的对象过多时就使用这个异常类 Printer(); Printer(const Printer rhs); ~Printer(); ... private: static size_t numObjects;...
C++基础:MFC的多继承问题
这几天用几个基础类改写一个C++程序,为了偷懒,使用了继承。 本来有这个类 CChildThread : public CWinThread 现在加了个基类CChildThread : public CLIHelper, public CWinThread。 当时加的时候,犹豫了一下,还是顺手加在CWinThread前面了 编译正常;运行时却出现很奇怪的错误,发现本来应该是CChildThread 类的一个指针,在调试器中显示为CWinThread类实例,而且到处是类似的错误! 感觉跟刚加的基类有关,于...
C++实现爆炸后的振动效果
在许多游戏软件中,我们经常能看到这样的场面:当某一设施爆炸后,屏幕画面会伴随着轻微的振动,使人感到身临其境。笔者编写了一个函数void MoveView(int x,int y);通过CRT控制器将屏幕视角左上角坐标移至 (x,y)处,使画面相对移动,从而产生振动效果。程序由Borland C++ 2.0编写,采用VGA 12H模式,代码...
C++后根遍历二叉树的两种递归算法
法一:(通常) 用一般的二叉链表做存储结构,用到一个栈,同时为这个栈设置一个等大的辅助数组,用以标识栈中节点被访问的次数状态。实现如下: // 存储结构: typedef struct BTnode......{ char data; struct BTnode* lchild; struct BTnode* rchild; }BTnode,*BTree; //C实现: int postOrd(BTree T)......{ int top = 0; int tags[MAX_TREE_DEGREE];...
在C++中调用C#的DLL程序方法
使用C++调用C#的DLL SwfDotNet是C#编写的,作者的C#水平,真是令我佩服。这是个特别好的读写Swf文件的库。但是,我要用在C++项目中,怎么让C++调用C#的DLL呢。今天一上午都在琢磨这个问题,耽误了很多时间,原因是编译是出现: warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。 接着就是一大堆的0x01等等。自己做了个Sample,仔细分析发现还是自己没有搞清楚。正确的操作如下: 1 创建C# DLL...
温故而知新:C++常用排序算法
选择排序法SelectionSort(int arr[],int n) template typename T void SelectionSort(T arr[],int n) { int smallIndex; //表中最小元素的下标 int pass,j; //用来扫描子表的下标 T temp; //用来交换表元素的临时变量...
基础入门:C++简介
我们已看到用COM服务器组件对于建立一个基于网络的应用程序的重要性,但问题不在于是否建立它们,而在于用什么语言去创建。一种选择是用C++。 人们对C++有许多不同的看法,保守的C++程序员坚持用其他语言创建COM组件,他们认为只有真正的程序员使用C++。另一方面,VB程序员认为C++是一种很难掌握和使用的语言,没有必要增加编程时间和进行艰难的尝试。Java程序员认为他们比C++程序员强,因为James Gosling(Java的发明者)吸收了许多语言(包括C++ )的优点发明了Java,本章和下一章的目...
C++对象布局及多态实现探索之内存布局
前言 本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了c++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等。 写这篇文章源于我在论坛上看到的一个贴子。有人问vc使用了哪种方式来实现虚继承。当时我写了一点代码想验证一下,结果发现情况比我想象的要复杂。所以我就干脆认真把相关的问题都过了一遍,并记录成本文。 我对于c++对象模型的知识主要来自于lippman的书《inside the c++ object model》,中译版为候捷翻的《深度探索c++对象模型》,中英版我都看过,不过我还是推...
就c++中的const限定修饰符做一个入门的教程
const修饰符可以把对象转变成常数对象,什么意思呢? 意思就就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用! 使用方法是: const int a=1;//这里定义了一个int类型的const常数变量a; 但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆! 我们来看一个如下的例子: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include...
c++基础入门:布尔类型的入门教程
布尔类型对象可以被赋予文字值true或者false,所对应的关系就是真于假的概念! 我们通常使用的方法是利用他来判断条件的真于假,例如如下的代码: //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必著名出处和作者 #include iostream using namespace std; void main(void) { } 但是一些概念不清的人却不知道布尔类型的对象也可以被看做是一种整数类型的对象,但是他不能被声明成signed,unsigne...
C++箴言:拷贝一个对象的所有组成部分
在设计良好的面向对象系统中,为了压缩其对象内部的空间,仅留两个函数用于对象的拷贝:一般称为拷贝构造函数(copy constructor)和拷贝赋值运算符(copy assignment operator)。我们将它们统称为拷贝函数(copying functions)。如果需要,编译器会生成拷贝函数,而且阐明了编译器生成的版本正象你所期望的:它们拷贝被拷贝对象的全部数据。 当你声明了你自己的拷贝函数,你就是在告诉编译器你不喜欢缺省实现中的某些东西。编译器对此好像怒发冲冠,而且它们会用一种古怪的方式报复...