18 12
发新话题
打印

[推荐]最新电脑报部分精华文章集合

本帖已经被作者加入个人空间
  11、C++编程技巧

  C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。但是很多人使用了C++语言后却感到C++与C编程没有什么区别。这其实是由于对C++语言的特点和特色理解和使用不够造成的。事实上,没有任何一个程序员使用C语言的编程效率可以超过C++语言的。

  一、使用new和delete进行动态内存分配和释放
  运算符new和delete是C++新增的运算符,提供了存储的动态分配和释放功能。它的作用相当于C语言的函数malloc()和free(),但是性能更为优越。使用new较之使用malloc()有以下的几个优点:

  (1)new自动计算要分配类型的大小,不使用sizeof运算符,比较省事,可以避免错误。

  (2)自动地返回正确的指针类型,不用进行强制指针类型转换。

  (3)可以用new对分配的对象进行初始化。

  使用例子:

  (1)int *p;

  p=new int[10]; //分配一个含有10个整数的整形数组

  delete[] p; //删除这个数组

  (2)int *p;

  p=new int (100);//动态分配一个整数并初始化

  二、使用inline内连函数替代宏调用
  对于频繁使用的函数,C语言建议使用宏调用代替函数调用以加快代码执行,减少调用开销。但是宏调用有许多的弊端,可能引起不期望的副作用。例如宏: #define abs(a) ((a)<0?(-a):(a)), 当使用abs(I++)时,这个宏就会出错。

  所以在C++中应该使用inline内连函数替代宏调用,这样既可达到宏调用的目的,又避免了宏调用的弊端。

  使用内连函数只需把inline关键字放在函数返回类型的前面。例如:

  inline int Add(int a,int b);//声明Add()为内连函数

  这样编译器在遇到Add()函数时,就不再进行函数调用,而是直接嵌入函数代码以加快程序的执行。

  三、使用函数重载
  在C语言中,两个函数的名称不能相同,否则会导致编译错误。而在C++中,函数名相同而参数不同的两个函数被解释为重载。例如:

  void PutHz(char *str); //在当前位置输出汉字

  void PutHz(int x,int y,char *str); //在x,y处输出汉字

  使用函数重载可以帮助程序员处理更多的复杂问题,避免了使用诸如intabs()、fabs()、dabs()等繁杂的函数名称;同时在大型程序中,使函数名易于管理和使用,而不必绞尽脑汁地去处理函数名。

  四、使用引用(reference)代替指针进行参数传递
  在C语言中,如果一个函数需要修改用作参数的变量值的时候 ,参数应该声明为指针类型。例如:

  void Add(int *a) {(*a)++;}

  但是对于复杂的程序,使用指针容易出错,程序也难以读懂。在C++中,对于上述情况 可以使用引用来代替指针,使程序更加清晰易懂。引用就是对变量取的一个别名,对引用进行操作,这就相当于对原有变量进行操作。例如使用引用的函数定义为:

  void Add(int a) (a++;); //a为一个整数的引用

  这个函数与使用指针的上一个函数的功能是一样的,然而代码却更为简洁和清晰易懂。

  五、使用缺省参数
  在C++中函数可以使用缺省参数,例如:

  void PutHzxy(char *str,int x=-1,int y=-1)

  { if (x==-1) x=wherex();

  if (y==-1) y=wherey();

  moveto(x,y);

  PutHz(str);}

  可以有两种方式调用函数PutHzxy(),例如:

  PutHzxy("C++语言");//使用缺省参数,在当前位置输出

  PutHzxy("C++语言",10,10);//没有使用缺省参数

  通常的情况下,一个函数应该具有尽可能大的灵活性。使用缺省参数为程序员处理更大的复杂性和灵活性问题提供了有效的方法,所以在C++的代码中都大量地使用了缺省参数。

  需要说明的是,所有的缺省参数必须出现在不缺省参数的右边。亦即,一旦开始定义缺省参数,就不可再说明非缺省的参数。

  例如:

  void PutHzxy(char *str,int x=-1,int y=-1); //正确

  void PutHzxy(int x=-1,int y=-1,char *str);//错误

  六、使用模板和BIDS
  从Borland C++ 3.1中还引入模板(template)的功能,通过模板Borland C++实现了功能强大的BIDS(Borland International Data Structures)。使用BIDS可以不编程实现存储任何数据类型的数组、链表、堆栈、队列等数据结构。

  下面的例子实现了一个存储整型变量的堆栈:

  typedef BI_StackAsVector intstack;

  main()

  {instack is; //定义一个整型变量的堆栈

  for(int I=0,I<10,I++)

  is.push(I);//10个数压栈

  for(I=0,I<10,I++)

  cout<

  }

  通过语句is.push(),is.pop()可以对堆栈进行操作。
¤╭⌒╮╭⌒HTTP://WWW.LANGXI.ORG
╱◥██◣╭凌易网络社区欢迎您 Ahlxzj@126.Com
︱田︱田田│╰---------------------QQ:402433640
╬╬╬╬╬╬╬╬╬╬我的平淡来自于你的感觉!

TOP

  12、制作安装与反安装程序

  近日,笔者需要把一些平时经常使用和自己编的一些程序“压”在一张软盘上。于是,便安好了WinRAR,准备使用RAR的“自解压”功能。可又想起了“人见人爱”的Setup向导。经过研究,笔者发现了一种不用语言(编程)的方法就可轻松实现安装与反安装程序的制作。想让你的软件更专业吗?Let's go!

  软件名称:Tarma Installer

  最新版本:2.40.1130X汉化版

  下载地址:http://software.yalaso.net/softview.asp?softid=173

  安装很简单,一路按“下一步”即可。顺便欣赏一下吧。安装完成后,可从桌面或程序组进入主界面。哇!多漂亮的界面呀!单击“制建新方案”,便开始了制作“旅程”。在“新方案”界面上,左边为项目分类,右边为制作区,下面则是信息栏。在右上方,有3个按扭,它们分别为“上一步”、“下一步”和“帮助”。

  第一步:在“方案确认”中,输入程序标题、公司名及版本号。然后,在项目分类栏中单击“文件”,根据自己的需要分别在<AppFolder>(任意文件夹)、<Common File>、<Windir>和<WinSysDir>中添加文件。如需要,还可以自行添加文件夹。在“快捷方式”中,还可添加需要的快捷方式。

  提示:此快捷方式的图标必须在“文件”一栏中添加好。

  第二步:单击“下一步”,进入安装参数设置位置,在这里可以设置安装位置、选项和错误处理方法。接下来,在“自述文件和许”可当中可键入在复制文件前提示给用户的信息。在语言项目中,如需多语言支持,可在上方表内提供的语言种类前打钩(前提是先在下方选中“多语言支持”[U])。在需要项目中可以选择软件对系统和硬件的要求。

  第三步:在高级选项中,可设置用户注册页面信息和注册表、INI文件及环境等高级要求。

  第四步:在建立选项中,设置好建立的风格(推荐使用单个EXE),最好将“警告视为错误”前的钩去掉,否则经常会建立失败。

  最后,便可以点击“建立”(Ctrl+F5)完成这个程序的建立了。建立后,程序会自动生成反安装。
¤╭⌒╮╭⌒HTTP://WWW.LANGXI.ORG
╱◥██◣╭凌易网络社区欢迎您 Ahlxzj@126.Com
︱田︱田田│╰---------------------QQ:402433640
╬╬╬╬╬╬╬╬╬╬我的平淡来自于你的感觉!

TOP

  14、计算机等级考试释疑:VB应试心得

  VB因简单易学、功能强大和微软的支持而成为主流,于是越来越多参加全国计算机等级考试的人选择了它。不过请大家注意:二级VB考试笔试与上机时间均为90分钟,千万不要与其他语言的考试时间发生混淆。

  VB与QB的区别与联系
  VB与QB在数据类型、语法和程序结构等方面有很多相同之处,VB仍采用基本的BASIC语言,但它们的区别却是根本性的:

  1.QB只是一门程序设计语言,而VB不但是一门程序设计语言,更重要的还是在Windows操作系统界面下的软件开发工具,它主要用来开发可视化软件。

  2.QB中的程序是一个完整的程序系统,是不可以分割的,程序执行时从头执行到尾,编写程序时一定要精确地写出每一个步骤;而VB程序采用的是事件驱动编程机制,用户编写程序时不必写出很长的程序,只要写出简短的程序片断就可以了。

  比如这样一个例子,要求编程实现:输入两个数,输出它们的和。如果用QB,程序如下 INPUT a;b

  c=a+b

  PRINT c

  END

  而用VB程序则如下:

  Private Sub Command1_Click()

    A=InputBox("a=")

    B=InputBox("b=")

    C=val(a)+val(b)

    Print C

  End Sub

  这个例子中QB程序与VB程序在程序代码和语法规则上基本相似,但执行时就不一样了:QB只要运行,就可以得出结果;而VB程序则必须用鼠标单击Command1对象才能执行其代码,得出结果。如果单击窗体则操作对象错误;如果对Command1不单击而进行其他操作,则对象响应事件错误。这两者都不能执行VB下面的程序代码。因而在VB应试学习过程中,既要学会分析BASIC程序的执行流程,又要熟悉和掌握VB的操作界面、面向对象程序设计的特点。

  重视VB的基本概念
  VB的基本概念中,要特别重视数据类型的定义、表达式、函数及常用控件的属性、功能和使用。这是掌握面向对象程序设计、学会编写事件代码的基础,考试的内容涉及面很广,大家要多加记忆与理解。

  在前面的例子中,如果将其中的“C=val(a)+val(b)”改为“C=A+B”,那么从键盘输入A=1,B=2,结果还是3吗?答案是否定的。因为InputBox函数是输入语句,它只能接收文本,所以变量A与B内存放的并非是数字1与2而是字符“1”与“2”,而语句C=A+B中的“+”号的含义对于文本来讲并不是加而是连接的意思,因而答案为12。这个问题的理解充分地说明了掌握基本概念的重要性。

  2002年秋季笔试中有一选择题:在窗体上画一个名称为Commandl的命令按钮,然后编写如下程序:

  Private Sub Command1_Click()

  Static X As Integer

  Static Y As Integer

  Cls

  Y=1

  Y=Y+5

  X=5+X

  Print X,Y

  End Sub

  程序运行时,三次单击命令按钮Commandl后,窗体上显示的结果为:

  A) 15 16   B) 15 6

  C) 15 15   D) 5  6

  解析:本题主要考查对数据的定义,用Dim和用Static定义的变量在程序中的结果是完全不同的。用Dim定义的变量,在过程运行结束后,变量的值不会保留;用Static定义的变量,其值只被初始化一次,其后的值将继续保留。题目中x定义为Static类型,x第一次运行时初值为0,第二次运行前其值变为5,第三次运行前其值变为10,而y虽然也定义为Static,但每次都要执行一个“y=1”这个赋值语句,所以第三次执行完,其结果应为:x=15,y=6。

  掌握VB中的控件
  在VB中,控件是非常重要的内容,考试中常常应用在程序分析和上机操作中。考生们要多记忆、多运用、多对比、多总结,举一反三,才能掌握好各个控件。

  2002年春季笔试中有一选择题:在窗体上画两个单选按钮,名称分别为Option1、Option2,标题分别为“宋体”、“黑体”;一个复选框,名称为Check1,标题为“粗体”;一个文本框,名称为Text1,Text属性为“改变文字字体”。要求程序运行时,“宋体”单选按钮和“粗体”复选框被选中(窗体外观如图1),则能够实现上述要求的语句序列是:



  A) Option1.value=True B) Option1.Value=True

  Check1.Value=False   Check1.Value=True

  C) Option2.Value=False D) Option1.Value=True

  Check1.Value=True    Check1.Value=1

  解析:本题主要考核VB的两个控件,单选按钮控件与复选框控件的Value属性,虽然它们属性名是一样的,但取值却不同。单选按钮Value属性值为True表示选中,而复选框选中其值应为1,所以正确答案应为D。许多考生由于学习过程中不注重对比,没有真正理解和掌握,常错选为B。

  2002年秋季考试中有一填空题:在窗体上画两个标签,其名称分别为Label1和Label2,Caption属性分别为“数值”及空白;然后画一个名称为HScroll1的水平滚动条,其Min的值为0,Max的值为100。程序运行后,如果单击滚动条两端的箭头,则在标签Lable2中显示滚动条的值,如图2所示。请在[1]和[2]处填入适当的内容,将程序补充完整。



  Private Sub HScroll1_[1]

  Labl2.Caption=HScroll1.[2]

  End Sub

  解析:本题主要考查考生对于滚动条控件事件及属性的掌握,因为滚动条支持两个事件,即跟踪滚动条中的动态变化的Scroll事件和得到滚动条最后位置的Change事件,题中要求单击滚动条两端的箭头所能触发的事件应为Change事件,可以显示当前滚动位置(即数值)的应为Value属性,故应填入Change和Value。

  抓住程序“要害”进行分析
  程序的“要害”就是算法和过程,重点在于抓住算法的使用和过程的执行,所以要花时间进行认真的分析,不要放过每一个细节。否则一不小心就容易得出错误分析,与正确结果大相径庭。

  2002年秋季笔试中有一程序分析题:在窗体上画一个名称为Text1的文本框和一个名称为Command1的命令按钮,然后编写如下事件过程:

  Private Sub Command1_Click()

  Dim array1(10,10) As Integer

  Dim i,j As Integer

  For i=1 To 3

   For j=2 To 4

    array1(i,j)=i+j

   Next j

  Next i

  Text1.Text=array1(2,3)+array1(3,4)

  End Sub

  程序运行后,单击命令按钮,在文本框中显示的值是:

  A)12 B)13 C)14 D)15

  解析:本题中我们应将分析重点放在text1的赋值上面,由于程序已知其算法为:text1.text=array1(2,3)+array1(3,4),因而只要求array1(2,3) 与array1(3,4)的值而没有必要去求其他数组元素的值,根据数组通项的算法array1(i,j)=i+j可知array1(2,3)=5、array1(3,4)=7,故正确答案应为A。
¤╭⌒╮╭⌒HTTP://WWW.LANGXI.ORG
╱◥██◣╭凌易网络社区欢迎您 Ahlxzj@126.Com
︱田︱田田│╰---------------------QQ:402433640
╬╬╬╬╬╬╬╬╬╬我的平淡来自于你的感觉!

TOP

  13、VC++中色彩的运用

  如华丽得体的衣装可以让一个外貌平平的女孩变得自信而愉快那样,在VC++程序界面中适当地配上颜色也会使你的程序变得生动悦目。

  一、寻找VC++中调色板的配色参数
  最直接的方法是设置应用程序主窗体的背景色。对此,简单的办法是通过ClassWizard在视图中创建一个成员函数来响应消息WM_ERASEBKGND,关键源代码如下:

   BOOL CMyView::OnErase Bkgnd(CDC* pDC)

  {

   CBrush backBrush(RGB(255,255,0));

   CBrush* pOldBrush=pDC->SelectObject(&backBrush);

   CRect rect;

   pDC->GetClipBox(&rect);

   pDC->atBlt(rect.left,rect.top,rect.Width(),rect.Height(),PATCOPY);

   pDC->SelectObject(pOld Brush);

  return TRUE;

  }

  本段代码的作用是将主窗体背景绘制成米黄色,其中所用的RGB宏是用于指定三原色(红,绿,蓝)的“配比数”,每个值都是0~255之间的一个整数。在上面代码中RGB表示混合同样一份红色与绿色,并关闭蓝色得到黄色;0,0,0为黑色,255,255,255为白色。

  RGB宏是VC++程序使用颜色的基础,但在使用时遇到的棘手问题是,当你选择一种“中间色”时,你如何才能知道确切的“配方”──那三个0~255之间的颜色参数分别是多少?这也是笔者在研制一个项目中遇到的一个实际问题,尽管它在整个项目中显得微不足道。为此,笔者编制了一个实验程序,运行后可以调用MFC的颜色对话框,当我们选中具体颜色后,就得到其RGB值,并存放到文本文件RGBNum中。当我们得到这个值后,在上面代码中就可以用这个数值去替代RGB宏了。实验程序具体代码如下:

  void CMyView::OnSelRGB()

  {

  CColorDialog colorDialog;

  COLORREF Mycolor;

  FILE *fin;

  fin=fopen("RGBNum.txt","a");

  if(colorDialog.DoModal()==IDOK)

  {

  Mycolor =colorDialog.GetColor();

  fprintf(fin," Mycolor =%ld\n",Mycolor);

  fclose(fin);

  }

  }

  上述代码是通过COLORREF获取RGB颜色值的。COLORREF是一个32bit整数,它常用RGB宏作初始化。

  二、设置对话框的背景颜色
  要改变应用程序所有对话框的背景颜色,可以调用CwinApp::SetDialogBkColor(),它的第一个参数指定了背景颜色,第二个参数指定了文本颜色。

  下例将应用程序对话框设置为蓝色背景和黄色文本。

  BOOL CMyApp::InitInstance()

  {

  ......

   //蓝色背景黄色文本

   SetDialogBkColor(RGB(0,0,255),RGB(255,255,0));

   ......

  }

  三、如何控制文字的显示颜色
  在VC++编程中,常会用LOGFONT结构中的14个字段定义去控制显示字符的大小、粗细、角度、字体等。而且可以用函数SetTextColor(COLORREF crColor)设置字符颜色。有关代码如下所示:

  void CMyView::OnDraw(CDC* pDC)

  {

   CMenuCom03Doc* pDoc = GetDocument();

   ASSERT_VALID(pDoc);

   // 设置文本颜色

   COLORREF color=RGB(0,250,0);

  pDC->SetTextColor(color);

  pDC->TextOut(120,200,"彩色字体样例");

  }

  下一步,我们还可以设置具有翻转背景颜色的文本。即调用CDC::SetBkMode()函数并传送TRANSPARENT使背景颜色保持不变。以下代码用红色带阴影显示文本:

  void CMyView::OnDraw(CDC* pDC)

  {

   CDelemeDoc* pDoc = Get Document();

   ASSERT_VALID(pDoc);

   // TOD add draw code for native data here

   CRect rc;

   GetClientRect(rc);

   CString str(_T("Hello,World!"));

   pDC->SetBkMode(TRANS PARENT);

   rc.OffsetRect(1,1);

   pDC->SetTextColor(RGB(0,0,0));

  pDC->DrawText(str,str.GetLength(),rc,DT_SINGLELINE|DT_CENTER|DT_VCENTER);

  rc.OffsetRect(-1,-1);

  pDC->SetTextColor(RGB(255,0,0));

  pDC->DrawText(str,str.GetLength(),rcView,DT_SINGLELINE|DT_CEN TER|DT_VCENTER);

  }

  本文列举的源代码均在VC++6.0下调试运行通过。
¤╭⌒╮╭⌒HTTP://WWW.LANGXI.ORG
╱◥██◣╭凌易网络社区欢迎您 Ahlxzj@126.Com
︱田︱田田│╰---------------------QQ:402433640
╬╬╬╬╬╬╬╬╬╬我的平淡来自于你的感觉!

TOP

  15、杀毒环境有讲究

  杀毒要借助杀毒软件,但不是说一点“杀毒”按钮就万事大吉了。针对不同特性的病毒,我们应该选择相应的系统环境。

  一、非系统文件病毒
  杀这种病毒相对容易,一般在Windows环境下就能被“全歼”。

  二、已激活的非系统文件病毒
  虽然现在的反病毒软件都声称能查杀内存病毒,但此技术还未臻完善,效果可能达不到预期。因此,推荐杀此类病毒应在安全模式下进行。在Windows安全模式下,这些病毒不会在启动时被激活。

  三、系统文件病毒
  杀此类病毒一定要在干净的DOS环境下进行,甚至还需要动用几种杀毒软件交叉、反复查杀才能彻底清除。

  四、网络病毒
  此类病毒现在层出不穷,很容易反复感染,因此不但需要干净的杀毒环境,还必须在断开网络的情况下进行查杀。
¤╭⌒╮╭⌒HTTP://WWW.LANGXI.ORG
╱◥██◣╭凌易网络社区欢迎您 Ahlxzj@126.Com
︱田︱田田│╰---------------------QQ:402433640
╬╬╬╬╬╬╬╬╬╬我的平淡来自于你的感觉!

TOP

这么东西很实用~

确实不错

[em03]

TOP

乖乖,看到累人

TOP

哦顶
人生应该如蜡烛一样从顶燃到底,一直都是光明的..... 给你的心灵点一盏灯,给你的灵魂寻一处岸.

TOP

 18 12
发新话题