接触VC之二:MFC类基础,C++程序编写规范介绍

由于本文是面对C语言基础的(因为我就是从C学起来的),而MFC是利用C++类技术构建起来的。因此有必要在此为只了解C的朋友们,普及一下C++语言中类的概念。熟悉C++的朋友可以跳过本部分。从总体来说C++是向下兼容C的,你可以很不费力气地将用C编好了的程序拿到C++环境下编译执行。其C++只不过是在C的基础上添加面向对象技术(OOP),也就是类的概念,且值得一提的是C与C++都是由美国的贝尔实验室(在之前我只知道发明过电话)发明的。

一、什么是类?

按一些书本上的定义来说“就是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。因此,类中的数据具有隐藏性,类还具有封装性。”嗯,类还像上面的那句话一样,具有很强的抽象性。让我来用一个例子来解释类吧。 嗯,我们世界上有一个生物种类叫做鸟,在C++上世界我们也可以制作一个类叫做鸟类。它应该有头,有躯干,有腿,有内脏,还有一个非常重要的翅膀。于是,其类描述如下:

class Aves
{
  char m_strHead[10];
  char m_strTrunk[10];
  char m_strCrura[10];
  char m_strWing[10];
  char m_strBowels[10];
};

哈,这样一个鸟类建立好了,怎么样与C中结构体没什么两样吧。(在C++中struct与class基本上是同义词,过一会儿会说到它们有什么不同的。)如果你想建立一个小鸟的话,不用像C中那样麻烦地打struct Aves XXX,而是直接使用Aves XXX就可以了,不打前面的struct或class。在人类对鸟类形成概念之前,鸟的翅膀、躯体等等就真的存在了(没有人有疑议吧?),但在人们根本不知道鸟的那对长满羽毛的扑扇扑扇就可以飞的东西叫什么名字,也不会知道翅膀这个词指的是什么意思。现在我们的这个C++鸟类也正处于这个状态,在那些成员变量中没有被赋与任何值。而现实生活中,一个种类中的具体名字是在一个类对象形成初期被命名的,这是一个名词初始化的过程。在C++类中,当建立一个类对象时总也要有一个初始化各成员变量的过程,于是构造函数被引入了。它在一个实例被声明和被建立(这两个有一些区别)时调用。我们的C++鸟类各个成员变量的赋值命名就可以利用它来实现:

class Aves
{
  Aves ()
  {
     strcpy(m_strHead, "Head");
     strcpy(m_strTrunk, "Trunk");
     strcpy(m_strCrura, "Crura");
     strcpy(m_strWing, "Wing");
     strcpy(m_strBowels,”Bowels”);
  }
  char m_strHead[10];
  char m_strTrunk[10];
  char m_strCrura[10];
  char m_strWing[10];
};

瞧,我是怎么在类里面建立一个构造函数的。一个类的构造函数的名字要与其类名同名,且不能有返回值,void也不行。我们在构造函数中,对各个成员函数命名。当Aves bird;时(声明一个bird对象),Aves类的构造函数将会被调用,把bird.m_strHead,bird.m_strTrunk等等成员变量分别赋值为”Head”,”Trunk”。这样一讲,希望大家对构造函数有了一定的了解了。我们既然有构造函数可以对类成员进行初始化,那么用什么来对类成员销注呢?说白了就是有在建立类对象时调用的函数,什么函数是在类对象被删除时调用的函数呢?那就是析构函数,其命名规则与构造函数是一样的,只不过需要在其函数名前紧加一个~(波浪号),且不能有参数。如我们的类就是~Aves(); 至于析构函数具体作用嘛…举个例子来说,当在构造函数中申请了一段内存,我们就必须在析构函数中释放这段内存,否则会内存泄漏。那么什么时候会引发声明的类对象被删除呢?要解决这个问题,我还需要借用一个叫名域(name space)的概念。当系统执行指针离开声明的类对象所在名域时,就会引发类对象的删除(类型的有效型也可以如此解释)。而名域这个概念最实称的理解就是一对大括号,在这对括号内的空间就是一个名域。(当然名域其实不是这么简单的。如类本身就是一个名域,还可以自己设定一个名域,用于类型声明设定,可以用已有的类型冲突。名域真实用途是这个。具体含义参见《C++标准库》,图书大厦有侯捷先生的译本)比如:

{//名域1
  char * strValue;
  {//名域2
     Aves bird;
     {//名域3
       strValue=bird.m_strWing;
     }
}//<<就在后大括号这里引发了bird对象的析构函数
strValue=”Blue Atlantis”;
}

时间: 2024-09-09 07:32:30

接触VC之二:MFC类基础,C++程序编写规范介绍的相关文章

接触VC之四:COM组件模型基础

一年又一年,已经又过了一年了.我VC的生涯已经两岁了.可以相当地庆贺一下哟.回顾这一年的学习(唉,还没有工作实践呢.这年头,工作不好找哇.),还学了不少的好东西.其中,最重要的就是COM组件模型,我个人觉得这个几乎是Windows的核心.许多先进的技术(比如微软著名的DirectX,ADO,没有人会不知道吧)都以COM组件的形式发布的.现在,我瞄上了另一个好东东,就是泛型编程技术.它能够编写出清晰.灵活.高度可重用的代码,在ATL中就可以依稀看出它的影子(现在网上ATL文章有很多,我以后也会谈到

VC下用MFC类实现网络编程

随着计算机网络化的深入,计算机网络编程在程序设计的过程中变得日益重要.许多文章都曾经介绍过用VC++进行Socket编程的方法.但由于都是直接利用动态连接库wsock32.dll进行操作,实现比较繁琐.其实,VC++的MFC类库中提供了CAsyncSocket这样一个套接字类,用它来实现Socket编程,是非常方便的. 客户端 创建一个Dialog Based项目:CSockClient.设计一对话框,增加ID_Connect(连接).ID_Send(发送).ID_Exit(关闭)按钮,增加Li

接触VC之一:WinSDK

预设目录: 第一部分:WinSDK 第二部分:MFC类基础,C++程序编写规范介绍 第三部分:MFC基于对话框程序 第四部分:Dll动态链接库 第五部分:COM组件基础 第六部分:COM组件几个常用技术:IDispatch,可连接对象. 第七部分:COM组件的应用,以及MFC的COM编写 第一部分:WinSDK 学习VC已近一年了,回顾我的学习历史真是相当的艰苦.既没有老师教,图书馆里也没有好书可看.为了买到好书,身上的银子几近花光,不得不过节衣缩食的生活.近些日来动起自己写写什么的打算,一来可

【数字图像处理】 二.MFC单文档分割窗口显示图片

本文是讲述<数字图像处理>系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程及常用图片软件讲解. 一. CSplitterWnd静态分割窗口 1.CSplitterWnd类基础知识(该部分引用:百度百科和麦田里的稻草人博客)CSplitterWnd类提供一个分离器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗

vc++深入跟踪MFC程序的执行流程

在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉.这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流程)和MFC程序的设计思想和机制,即使是写过Windows程序的学习者,也会感到非常迷惘并且无从下手.而这种感觉的出现会使大家认为自己离开了书本上的例子就无法设计编制程序.下面我就来说一说一个MFC具体是如何被执行的.在阅读本文之前,你要有一定的Windows程序设计基础,知道Windows程序的运

重新取回值-VC++6.0 MFC 使用组合框如何返回取值的问题

问题描述 VC++6.0 MFC 使用组合框如何返回取值的问题 我用VC++6.0 MFC 做一个简单的个人信息系统登记系统,在登记记录时,对个性别男女用了组合框,登记时默认选项是男只要 m_ecombo.SetCurSel(0);这个函数里的变量只要是0就可以了,通赤数据库操作,追加进入数据库表了,但当你将这条记录调出修改时,同样需要这个组合框识别,这里我用了以下的操作 CRecEdit dlg; dlg.m_ecombo.InsertString(0,"男"); _dlg.m_ec

代码重构(二):类重构规则

在上篇博客<代码重构(一):函数重构规则(Swift版)>中,详细的介绍了函数的重构规则,其中主要包括:Extract Method, Inline Method, Inline Temp, Replace Temp with Query, Introduce Explaining Variable, Split Temporary Variable, Remove Assignments to Parameters, Replace Method with Method Object等.关于

在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量?

问题描述 在MFC单文档程序中,如何在子对话框类中访问视类中的一个变量? 如题,小弟最近遇到一个问题,新建一个单文档程序,并在其中引入对话框资源.我想在视类的OnDraw()函数中通过响应视类的一个变量的变化来改变视类窗口中图形的状态,而该视类变量的变化是由对话框中的一个控件控制的,这个控件是由旋钮控件和编辑控件捆绑而成的.在网上看了一些资料,试了其中的一些方法,都没能成功.论坛中高手众多,想请热心的高手们给个解决方法,在此先谢过了!能给个相似的例子的更好! 解决方案 要么你把那个变量定义成静态

vc zip,unzip类 解压.docx文件内容是乱码,求大神解答啊

问题描述 vc zip,unzip类 解压.docx文件内容是乱码,求大神解答啊 目前只有.docx文件解压有问题,为什么会这样,求大神帮忙解答下,我没有c币,谢谢好心人了!!!! 解决方案 可以换成ZLib开源代码来试试,很不错,也很简单 解决方案二: 可以换成ZLib开源代码来试试,很不错,也很简单 解决方案三: 我发现.odcx文件用office可以打开,我用的wps,呵呵,找了一天原因,真坑爹 还是谢谢你的回答