摘要: C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没 阅读全文
posted @ 2011-11-27 16:29 雪狼的程序故事 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 转载自网站http://www.vckbase.com/document/viewdoc/?id=950,谢谢原作者提供。虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足,希望大家批评和指正,在此深表感谢! 一、 基本概念 首先,C++通过虚函数实现多态."无论发送消息的对象属于什么类,它们均发送具有同一形式的消息,对消息的处理方式可能随接手消息的对象而变&qu 阅读全文
posted @ 2011-11-27 14:21 雪狼的程序故事 阅读(227) 评论(0) 推荐(0) 编辑
摘要: (1)GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR属性。这三个属性与光源的三个对应属性类似,每一属性都由四个值组成。GL_AMBIENT表示各种光线照射到该材质上,经过很多次反射后最终遗留在环境中的光线强度(颜色)。GL_DIFFUSE表示光线照射到该材质上,经过漫反射后形成的光线强度(颜色)。GL_SPECULAR表示光线照射到该材质上,经过镜面反射后形成的光线强度(颜色)。通常,GL_AMBIENT和GL_DIFFUSE都取相同的值,可以达到比较真实的效果。使用GL_AMBIENT_AND_DIFFUSE可以同时设置GL_AMBIENT和GL_DIFFUSE属性。 ( 阅读全文
posted @ 2011-11-19 18:15 雪狼的程序故事 阅读(6722) 评论(0) 推荐(0) 编辑
摘要: 题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { char * strDestCopy=strDest; //[3] if ((strDest==NULL)||(strSrc==NULL)) //[1] throw "Invalid argument(s)"; //[2] 阅读全文
posted @ 2011-11-19 17:08 雪狼的程序故事 阅读(774) 评论(0) 推荐(0) 编辑
摘要: 今天,用opengl实现bezier曲线的绘制,但是当我将控制点增加到九个的时候,程序死活绘制不出图像。后来经过一番折腾,终于知道,是xp系统的问题,程序在win7上可以正常运行。下面我附上我的主要程序第一段是利用glEvalCoord1f()函数先生成离散点,然后用直线链接。 glShadeModel(GL_FLAT); glColor3f(1.0,0.0,0.0); GLfloat controlPoint[9][3] = { {-1.0f,0.0f,0.0f},{-0.75f,0.707f,0.0f},{-0.5f,1.0f,0.0f}, {-0.25f,0.707f,0.0f... 阅读全文
posted @ 2011-10-23 11:32 雪狼的程序故事 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 几乎所有OpenGL应用目的都是在屏幕窗口内绘制彩色图形,所以颜色在OpenGL编程中占有很重要的地位。这里的颜色与绘画中的颜色概念不一样,它属于RGB颜色空间,只在监视器屏幕上显示。另外,屏幕窗口坐标是以象素为单位,因此组成图形的每个象素都有自己 的颜色,而这种颜色值是通过对一系列OpenGL函数命令的处理最终计算出来的。本章将讲述计算机颜色的概念以及OpenGL的颜色模式、颜色定义和两种模式应用场合等内容,若掌握好颜色的应用,你就能走进缤纷绚丽的色彩世界,从中享受无穷的乐趣。9.1、计算机颜色 9.1.1 颜色生成原理 计算机颜色不同于绘画或印刷中的颜色,显示于计算机屏幕上每一个点的颜.. 阅读全文
posted @ 2011-09-28 21:41 雪狼的程序故事 阅读(7823) 评论(0) 推荐(1) 编辑
摘要: 今天将图像缩放的双线性内插法弄完了,主要的思想如下:对于一个目的像素,通过目标图像与源图像的比值进行反向变换得到一个浮点坐标,如fx(x+u,y+v)其中为非负整数,u,v为区间[0,1]上的浮点数。则目的像素的颜色值可以由源图像的点fx(x,y)与其相邻的四个点的颜色值决定。公式为:fx(x+u,y+v)=(1-u)(1-v)fx(x,y)+(1-u)(v)fx(x,y+1) +(u)(1-v)fx(x+1,y)+uvfx(x+1,y+1);下面是我自己写的一个缩放图像的函数。void CTestView::Linear_BMP(COLORREF **DesImage,double DesW 阅读全文
posted @ 2011-09-28 19:33 雪狼的程序故事 阅读(785) 评论(0) 推荐(0) 编辑
摘要: 此文转自别人博客,感谢原作者1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表 void foo(...); void foo(parm_list,...);2:函数参数的传递原理 函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:先介绍一下可变参数表的调用形式以及原理: 首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下: void func(int x, float y, char z); 那么,调用函数的时候,实参 char z 先进栈,然后是 float y,最后是 int x,因此 阅读全文
posted @ 2011-09-18 21:09 雪狼的程序故事 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 第一: //////////Visula C++ 6.0环境 #include<iostream.h>void main(){int a=3;int *p=new int;p=&a;cout<<*p<<endl;delete p; /////////有错误} 第二: //////////Visual C++ 6.0环境 #include<iostream.h>void main(){int a=3;int *p=new int;*p=a;cout<<*p<<endl;delete p;}其中第一个程序存在错误(会生 阅读全文
posted @ 2011-09-18 16:45 雪狼的程序故事 阅读(176) 评论(1) 推荐(1) 编辑
摘要: 今天看了看opengl的融合技术,联系前一段时间老师让我改的一个用他自己的框架实现的3d物体透明融合的程序,感觉到老师说的思路,不可以实现。因为三维的透明物体,简单的使用融合功能和融合因子是不够的,三维物体有远近,因此三维物体的绘制过程是利用的是深度缓冲技术。这样的话,对于绘制透明物体与不透明物体,顺序是十分关键的。一般来说,应该先画不透明物体,因为透明物体的绘制需要opengl的融合功能,glEnable(GL_BLEND);,但是融合功能一旦启动,会影响后继物体的着色。但是先画不透明物体,又会产生新的问题。因为透明物体往往在不透明物体的前面,所以在深度测试中,透明物体的点会通过测试,所以. 阅读全文
posted @ 2011-09-18 12:39 雪狼的程序故事 阅读(4266) 评论(0) 推荐(0) 编辑