vc++222.doc_第1页
vc++222.doc_第2页
vc++222.doc_第3页
vc++222.doc_第4页
vc++222.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

引用(reference)是为一个已声明的变量起一个别名。声明一个引用时需要在其名称前加符号“&”,并同时对引用进行初始化,即指定它所引用的对象(是哪一个变量的别名)。 声明一个引用一般采用如下格式: & = ;例如:int ActualInt;/ 声明变量ActualIntint &OtherInt = ActualInt;/ 声明变量ActualInt的引用OtherInt 一旦为一个变量声明一个引用,那么对这个引用的所有操作实际上都是对被引用变量的操作,它们代表同一个变量并且占用相同的内存单元。 例如,为变量i声明一个引用r,在程序中分别对r和i进行操作。当r变化时,i也随之变化,反之亦然。void main(void)int i=10;int &r=i; / r是变量i的引用型变量r+;/ 同时执行i+couti=i, r=rn;i=88; / 同时执行r=88couti=i, r=rn; 运行结果:i=11,r=11i=88,r=88 内联函数的定义方法和格式: inline 函数值的类型 函数名(形参及其类型列表) 函数体 如:inline double square(double x) return x*x; void main() double x; coutx; cout”the squre is “square(x); l 重载是C+提供的一个新特性。C+重载分为函数重载和运算符重载,这两种重载的实质是一样的,因为进行运算可以理解为是调用一个函数。l 通过使用重载机制,可以对一个函数名(或运算符)定义多个函数(或运算功能),只不过要求这些函数的参数(或参加运算的操作数)的类型有所不同。l 重载使C+程序具有更好的可扩充性。为什么要使用函数重载 在原有C语言中,每个函数必须有其唯一的名称,这样的缺点是所有具有相同功能、而只是函数参数不一样的函数,就必须用一个不同的名称,而C+中采用了函数重载后,对于具有同一功能的函数,如果只是由于函数参数类型不一样,则可以定义相同名称的函数。函数重载是指一个函数可以和同一作用域中的其他函数具有相同的名字,但这些同名函数的参数类型、参数个数、返回值、函数功能可以完全不同。如: #include void whatitis(int i) coutthis is integeriendl;void whatitis(char c) cout“this is string”cendl; main() int i=1; char c=abcdef;whatitis(i); whatitis(c);在本例中定义了两个名称都叫whatitis的函数,但它们的形参类型不同。因此,这两个函数就是重载函数。l 运算符重载:指对于不同数据类型的操作数,同一个运算符所代表的运算功能可以不同。l 一个运算符定义了一种操作,一个函数也定义了一种操作,其本质是相同的,当程序遇到运算符时会自动调用相应的运算符函数。l 虽然重载运算符完成的功能都能够用一个真正的成员函数来实现,但使用运算符重载使程序更易于理解。l 与函数重载类似,编译器是根据参加运算的操作数的类型来识别不同的运算。重载运算符的形式: 重载一个运算符,就是编写一个运算符函数,重载运算符(函数)的原型为: operator();运算符重载与函数重载的区别:l 同一个重载运算符的参数个数是相同的。l 不能定义新的运算符,只能重载现有的运算符。l 运算符重载后仍然保持原来的优先级和结合性。1引用及声明方法 引用就是某一变量(目标)的一个别名,这样对引用的操作就是对目标的操作。引用的声明方法:类型标识符 &引用名=目标变量名;如:int a; int &ra=a; /定义引用ra,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。(3)声明引用时,必须同时对其进行初始化。(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名。(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,所以系统并不给引用分配存储单元。几点说明由上例可看出:(1)传递引用给函数与传递指针的效果是一样的,这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,这样形参与形参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的效率和所占空间都好。(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。参数传递方式:l 值传递:单向l 按地址传递:双向l 引用传递:双向例 实参与形参的值传递。调用函数后,实参a、b的值并没有发生改变。#include void swap(int x, int y)/ 函数定义cout x=x y=yendl;int temp=x;/ 交换形参x和yx=y;y=temp;coutafter swap:endl;cout x=x y=yendl;main()int a=20, b=40;coutbefore swap:endl;cout a=a b=bendl;swap(a, b);/ 函数调用cout a=a b=bendl;程序的输出结果为:before swap: a=20 b=40 x=20 y=40after swap: x=40 y=20 a=20 b=40引用作为函数参数 引用作为一般变量使用几乎没有什么意义,它的最大用处莫过于将其作为函数参数。在前面学习了按值传递和按地址传递两种参数传递方式,而引用传递与按地址传递在功能上很相象,可以在被调函数中通过改变形参来改变主调函数中的实参,但引用传递比按地址传递更简捷直观,也更好理解。 采用引用传递方式,只需在函数定义时使用引用作为形参,在函数调用时直接使用一般变量作为实参。 当引用被用作函数参数时,被调函数任何对引用的修改都将影响主调函数中的实参,被调函数对引用的操作即是通过实参的别名对实参进行操作。什么是构造函数:构造函数是一种特殊的成员函数,它是在创建对象时(声明或new动态创建)系统自动调用的成员函数。什么是析构函数:析构函数也是一种特殊的成员函数,它是在对象生存期结束时系统自动调用的成员函数。 构造函数的名称与类名相同,析构函数的名称必须在类名前加上“”符号。注意,构造函数和析构函数不能指定任何返回值类型,包括void返回类型。l 多态性也是面向对象程序设计方法的一个重要特征,它主要表现在函数调用时实现“一种接口、多种方法”。l 两种多态性:编译时多态性和运行时多态性。l 编译时多态性:在函数名或运算符相同的情况下,编译器在编译阶段就能够根据函数参数类型的不同来确定要调用的函数 通过重载实现。l 运行时多态性:在函数名、函数参数和返回类型都相同的情况下,只能在程序运行时才能确定要调用的函数 通过虚函数实现。 l 派生类的对象可以认为是其基类的对象。C+允许一个基类对象的指针指向其派生类的对象 这是实现虚函数的关键如果想通过基类指针调用派生类中覆盖的成员函数,只有使用虚函数。 要将一个成员函数声明为虚函数,只需在定义基类时在成员函数声明的开始位置加上关键字virtual。l 抽象类是类的一些行为(成员函数)没有给出具体定义的类,即纯粹的一种抽象。l 抽象类只能用于类的继承,其本身不能用来创建对象,抽象类又称为抽象基类。l 抽象基类只提供了一个框架,仅仅起着一个统一接口的作用,而很多具体的功能由派生出来的类去实现。l 虽然不能声明抽象类的对象,但可以声明指向抽象类的指针。 一个类如果满足以下两个条件之一就是抽象类:l 至少有一个成员函数不定义具体的实现;(即 纯虚函数 )l 定义了一个protected属性的构造函数或析构函数。l 不定义具体实现的成员函数称为纯虚函数。纯虚函数不能被调用,仅起提供一个统一接口的作用。l 纯虚函数的声明:l virtual ()= 0 ;l 当基类是抽象类时,只有在派生类中重新定义基类中的所有纯虚函数,该派生类才不会再成为抽象类。抽象是指对具体问题(对象)进行概括,抽出一类对象的公共属性和行为并加以描述的过程。抽象包括数据抽象和代码抽象(或行为抽象)。封装是把每个对象的数据(属性)和操作(行为)包装在一个类中。一旦定义了对象的属性和行为,则必须决定哪些属性和行为只用于表示内部状态,哪些属性和行为在外部是可见的。继承是指一个新类可以从现有的类派生而来。新类继承了现有类的特性,包括一些属性和行为,并且可以修改或增加新的属性和行为,使之适合具体的需要。多态性是指类中具有相似功能的不同函数使用同一个名称来实现,并允许不同类的对象对同一消息作出的响应不相同。 消息用MSG结构表示: typedef struct tagMSG HWND hWnd; / 目标窗口句柄 UINT message;/ 消息标识 WPARAM wParam;/ 消息参数1(附加信息,16位) LPARAM lParam;/ 消息参数2(附加信息,32位) DWORD time;/ 消息发送时间 POINT pt; / 消息发送时鼠标的屏幕坐标 MSG;l 类库是一个可以在应用程序中使用的相互关联的C+类的集合。 MFC作为一个Windows编程类库,它包含了200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。l 虽然程序在功能上千差万别,但从本质上看,都可以分为用户界面设计、文件操作、数据库访问及多媒体使用等几部分,这些都可以通过一些类来实现。MFC提供了一个标准化的程序结构,使开发人员不必从头设计一个Windows应用程序。l MFC实际上是一个庞大的文件库,它由几百个执行文件和源代码文件(如H文件)组成。 l MFC应用程序框架提供了构建应用程序所需要的类,在程序运行时能够生成运行时类的对象

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论