VC第八章
VC8
void Location::InitL(int xx,int yy) { X=xx; Y=yy; } void Location::Move(int xOff,int yOff) { X+=xOff; Y+=yOff; }
class Rectangle:public Location //派生类 { public: void InitR(int x,int y,int w,int h); int GetH() {return H;} int GetW() {return W;} private: int W,H; }; void Rectangle::InitR(int x,int y,int w,int h) { InitL(x,y); //派生类直接访问原公有成员 W=w; H=h; }
21
私有继承举例
class Rectangle:private Location { public: void InitR(int x,int y,int w,int h); void Move(int xOff,int yOff); int GetX() {cout<<"X=";return Location:: GetX();} int GetY() {cout<<”Y="; return Location::GetY();} int GetH() {cout<<”H="; return H;} int GetW() {cout<<”W="; return W;} private: int W,H; };
C++与面向对象的程序设计
第八章 继承与多态
1
本章主要内容
第八章 脂肪、Vc、单宁的测定
在装有2-3粒浮石并已烘至恒重的洁净的 抽提瓶内,加入约瓶体1/2的无水乙醚,把抽 提器各部分连接起来,打开冷凝水流,在水 浴上进行抽提。调节水浴的温度,使冷凝下 滴的乙醚速度为180滴/分。抽提时间一般需 8-10小时,含油量高的作物种子,应延长抽 提时间,至提取管中的乙醚用滤纸试验无油 迹时,抽提完成。
称 取 样 品 2 ~ 4g 两 份 ( 含 油 0.7-1g) , 精 确 至 0.001g。置于105±2℃烘箱中烘干1小时后取出,放 入干燥器内冷却至室温。同时另测试样的水分。将 试样放入碾钵内碾细,必要时可加入适量纯石英砂 助碾,用角勺将碾细的试样移入干燥的滤纸筒内, 取少量脱脂棉蘸乙醚抹净碾细的粉末、擦净碾锤、 碾钵和角勺上的试样和油迹,一并投入滤纸筒内, (对于已烘干磨细的样品可直接称样装筒),在试样 面层塞以脱脂棉或折叠封闭,然后将滤纸筒放入抽 提管内(也可用滤纸包进行)。
将样品预先在80℃的烘箱中干燥约2小时, 谷类、大豆、油沙豆经粉碎后,95%的可过40 目筛;油菜、胡麻、红花种子等粉碎后,95 % 的 可 过 20 目 筛 ; 花 生 仁 、 蓖 麻 仁 等 切 成 0.5mm以下的薄片;芝麻用粉碎机或碾钵碾碎, 不要留整粒;向日葵种子经剥壳后,籽仁粉 碎至均匀的粉状。试样处理完毕后,立即混 合均匀,装入磨口瓶中备用。
2、结果计算:
粗脂肪%(干基)=粗脂肪的质量*100/试样质量(干计) 带壳的油料作物粗脂肪%=籽仁粗脂肪%*出仁率% 结果用算术平均值表示,保留小数后两位。 结果允许相对差相,大豆不大于2%;其它作物不大 于1%。
二、残余法
本法适于测定谷类、油料作物种子大量样品的 脂肪测定。
1、测定步骤:
试样的选取和制备:选取有代表性的种子, 拣出杂质,按四分法缩减取样。小粒种子,如 芝麻、油菜等,取样量不得少于10g;大粒种 子,如大豆、花生仁等取样量不得少于15g。
11803_谭浩强《C程序设计》课件第8章PPT课件
如何处理文件读写错误?
2024/1/27
04
在进行文件读写操作时,需要判断返回值是否成功,如果 失败则需要使用perror()等函数输出错误信息。
05
如何实现文件的追加写入?
06
在使用fopen()函数打开文件时,使用追加模式"a"或"a+" 可以实现文件的追加写入。
29
拓展延伸:高级文件操作技术探讨
文本文件的读写操作
使用fscanf()、fprintf()等函数进行文 本文件的读写操作。
2024/1/27
文本文件的打开与关闭
使用fopen()函数打开文本文件,使 用fclose()函数关闭文本文件。
文本文件的定位与修改
使用fseek()、ftell()等函数进行文本 文件的定位与修改。
24
二进制文件操作实例
学习要求
认真听讲,理解文件操作的基本概念 和原理;多动手实践,通过编写程序 加深对文件操作的理解和掌握;注意 细节和规范,养成良好的编程习惯。
6
02
文件类型与指针
2024/1/27
7
标准文件类型
2024/1/27
文本文件
存储字符数据,每个字符对应一个ASCII码,Байду номын сангаас于阅读和编辑。
二进制文件
存储二进制数据,适用于非字符数据或需要高效存储和读取的场 景。
write
将指定的数据块写入到指定的文件描述符中(低级I/O函数)。
2024/1/27
14
04
随机访问文件内容
2024/1/27
15
文件定位函数
01
fseek()
用于设置文件位置指针,可以实 现在文件中的任意位置进行读写 操作。
vc++第8章
内存单元的地址 内存单元的内容
Page 4
指针的使用目的
使程序简洁、紧凑、 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 有效方便地使用数组和字符串 动态分配内存 得到多于一个的函数返回值
Page 5
&与*运算符
含义: 含义: 含义 取变量的地址 含义 取指针所指向变量的内容 • 两者关系:互为逆运算 两者关系: 单目运算符 单目运算符 i_pointer • 理解 优先级: 优先级: 优先级 2 优先级 2 &i_pointer 2000 结合性:自右向左 结合性:自右向左 结合性 自右向左 结合性 自右向左 …... 2000 2001 2002 2003 2004 2005 2006 …... 2000 变量i 变量 _pointer 指针变量 短整型变量i *i_pointer 10 i
(1)符号“*”表示这种变量是指针变量; 符号“ 表示这种变量是指针变量; 指针变量的值只能是某一个变量的地址( (2)指针变量的值只能是某一个变量的地址(起 始地址); 始地址); (3)编译程序为指针变量分配内存单元(4个字 编译程序为指针变量分配内存单元( 节); 定义指针变量时, (4)定义指针变量时,其类型定义了指针变量所 指向的数据类型, 指向的数据类型,该类型确定了数据占用的 存储空间的大小。 存储空间的大小。 (5)可对指针变量进行初始化
Page 3
计算机内存的存储
内存用户数据区 2000H 2001H 2002H 2003H 00101100 00000001
short i; 如果有
变量 i cin >>i; 输入 300; 即 i = 00000001 00101100B
char a; 如果有
VC 复习提要和重点
2、根据变量所占用内存的方式,变量分为 4 种类型:自动类型(auto)、静态类型(static)、
寄存器类型(register)以及外部类型(extern)。
例: #include <iostream.h>
void f (void)
{ static i“i=“<<i<<‘\n’;
#define 符号常量 表达式 如:#define PI 3.1415926
方法二:常量说明符 const 如:const int buf=512;
(三)变量的作用域和存储类型
1、作用域有 5 类:块作用域、文件作用域、函数作用域、函数原型作用域以及类的作用域。
注意:作用域运算符“::”仅用于全局标识符。
C++中编译预处理包括:宏定义、文件包含和条件编译。 特点:以#开头标识;每一条预处理指令各占一行,不是以分号结束
1、 文件包含
格式:# include “文件名” 或 # include <文件名>
2、宏定义。(只作简单替换)
微软教材 visual C# 2005 程序设计语言 第八章
声明和创建数组
8.2 声明和创建数组
声明数组变量:
int [] pins;
创建数组实例:
int[] pins = new int[4];
第8章 数组与字符串
数组的概念 声明和创建数组 初始化数组变量 访问单个数组元素 随堂练习 遍历数组元素 数组复制 如何把数组作为方法参数 随堂练习 System.Array类 常用字符串处理函数 小结 实验 习题
[2][3] [3][3] …… [M-1][3]
……
…… …… ……
[2][0]
[3][0]
[3][N-1]
…… [M-1][N-1]
……
[M-1][0]
……
Array的方法
System.Array类包含的一些常用方法
方法 描述
Sort()
Clear() Clone()
对数组元素进行排序
将一定范围内的元素设为 0 或 null 创建数组的副本
习题 (续)
8.14 习题
2.
判断正误,如果错误,请说明原因 。
(1) 一个数组的元素可以是多种类型的 数据。 (2) 数组的索引一般是浮点型的。 (3) 把数值型数组的一个元素作为参数 传入一个方法中,并在此方法中修 改了这个值。那么在方法返回后, 修改的值会被储存到数组中。
习题 (续)
8.14 习题
字符串常用方法
常用字符串处理函数
字符串常用方法
理解字符串
8.11.1
理解字符串
字符串本身可以被看作是一个System.Char对象 的数组。每一个Char对象在String中都有它自己 的位置,这个位置被称为“索引”。索引是从零 开始、从字符串的起始位置(其索引为零)计起 的非负整数。
课件谭浩强C程序设计第8章
指针是C语言中一种特殊的数据类型,用于存储内存地址。
通过指针,可以间接访问和操作内存中的数据。
指针提供了一种灵活且高效的数据访问方式,是C语言的重要特性之一。
01指针变量用于存储内存地址,其类型指明了所指向数据的类型。
02定义指针变量时需指定类型,如int *p表示p是一个指向整型数据的指针。
03指针变量可以进行赋值、比较、算术运算等操作。
数组名是一个常量指针,指向数组的首个元素。
指针与数组在内存中的表示方式相似,因此可以相互转换。
通过指针可以遍历数组,访问数组中的每个元素。
使用指针访问数组可以提高程序的灵活性和效率。
指针与数组03可以对指针进行加减整数操作,以改变指针所指向的内存地址。
例如,`ptr` 或`ptr--` 分别使指针向后或向前移动一个元素的位置。
指针与整数的加减运算通过使用间接引用运算符`*`,可以访问指针所指向的值。
例如,`*ptr` 表示获取`ptr` 所指向的值。
指针的间接引用可以对两个指针进行相减操作,得到它们之间相差的元素个数。
例如,`ptr2 -ptr1` 返回两个指针之间相差的元素个数。
指针的算术比较指针的比较可以使用关系运算符`==`、`!=`、`<`、`>`、`<=`、`>=`对指针进行比较,判断它们是否相等或相对大小。
空指针的判断可以使用`NULL`或`0`来表示空指针,通过比较可以判断一个指针是否为空。
指针的赋值可以使用赋值运算符`=` 将一个指针的值赋给另一个指针,使它们指向相同的内存地址。
例如,`ptr2 = ptr1;`。
指针的初始化在定义指针变量时,可以对其进行初始化,使其指向一个特定的内存地址或空值。
例如,`int *ptr = NULL;` 或`int *ptr = &var;`。
指针的复制可以使用赋值运算符将一个指针的值复制给另一个指针,使它们具有相同的值。
例如,`ptr2 = ptr1;` 之后,`ptr2` 和`ptr1` 将指向相同的内存地址。
VC++技术内幕(第四版)笔记
VC++技术内幕(第四版)笔记(1~2章)/***************************************/第一章:Microsoft Windows 和 Visual C++1,Windows应用程序中一定要有WinMain函数,用来完成某些特殊的任务,其中最主要的是创建应用次序的主窗口。
2,DOS下,所有次序的目标模块在创建过程中都被静态连接起来。
而Windows允许动态连接,即一些特定结构的库(DLL)可以在运行过程中被装入和连接,并且被多个应用程序共享。
3,项目是一些相互关联的源文件的集合,这些源文件经过编译、连接,然后被组合在一起形成可执行的Wwindows应用程序或DLL。
4,几个重要Developer Studio创建的中间文件:CLW (支持ClassWizard ) DSP (项目文件)DSW (工作空间文件) NCB (支持ClassView)OPT (保持工作空间的配置) PLG (建立日志文件)5,AppWizard是一个代码生成器,它会按照用户通过对话框指定的特性、类名、及源代码文件名来产生Windows应用程序工作架构。
AppWizard所产生的代码只是一些最基本的代码,它完成的功能完全由应用程序的基类所决定。
/**************************************/第二章:Microsoft基本类库应用程序框架1,按照惯例,MFC库类名用大写“C”打头。
2,类CMyApp的对象theApp就代表一个应用程序。
当运行该应用程序的时候,WINDOWS自动调用程序框架内部的WinMain 函数,WinMain函数会去查找该应用程序的全局构造对象(theApp),该对象是有CWinApp类派生类的对象。
C++中,全局对象在主程序被运行之前就已经构造好了。
3,当WinMain发现该应用程序对象(theApp)时,会自动调用虚拟成员函数CWinApp::InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。
visual C++课件第8章
8.2.2.3 功能实现
1. 2. 3. 4. 5. 6.
初始化List控件 为类添加数据成员和支持函数 实现“添加数据”功能 实现“写入文件”功能 实现“打开文件”功能 实现“修改数据”功能
VC++案例教程
北大出版社
运行结果
编译运行程序,效果如图8.5
VC++案例教程 北大出版社
8.2.2.2 定义数据结构
为了保存通讯录中的数据,必须定义相应的数 据结构。可以将联系人的数据信息定义为一个 结构体类型,也可以将其定义为一个类。在本 例中,我们将其定义为一个结构体类型。 typedef struct{ char Name[20]; // 姓名 char Mobile[20]; // 电话 char Birth[20]; // 生日 char Email[20]; // E_Mail } ADDRESSLIST;
VC++案例教程 北大出版社
教学内容:
8.1 文档串行化 8.2 CFile类
VC++案例教程
北大出版社
8.1 文档串行化
用户处理的数据往往需要存盘作永久备份。将文 档类中的成员变量的值以文件形式存储在磁盘中, 或者将文件中的数据读取到相应的成员变量,从 而恢复应用程序中的对象。这个过程称为文档的 串行化。 串行化分为两个部分
当文件操作完成后,必须关闭该文件。关闭一个已 打开的文件主要用Close函数。 例如:
CFile file; file.Open("MyFile.txt",CFile::modeWrite|CFile::modeCreate ); …… //文件其它操作 file.Close(); // 关闭文件
VC++第八章
例8-7 构造函数在类体外定义 编程实现: #include <iostream.h> class A { int a; float b; public : A(int x,float y) { a=x ; b=y; cout<<"调用 A\n";} void print( ) { cout<<"a="<<a<<'\t'<<"b= "<<b<<'\n'; } };
公有成员 保护成员 保护成员 保护成员 私有成员 私有成员
直接访问 直接访问 间接访问
间接访问 间接访问 间接访问
8.2.3 多重继承
多重继承可以看作是单一继承的扩展。所谓多重继承是派 生类具有多个基类,派生类与每个基类之间的关系仍然可以看 作是一个单一继承。 多重继承下派生类的定义格式:
class 派生类名:继承方式1 基类名1, 继承方式2 基类名2,……
派生类的析构函数 当派生类的对象撤消时(函数或程序运行结 束等情况),系统自动调用派生类的析构函数, 同时也自动调用基类的析构函数和对象成员的析 构函数。其调用顺序与构造函数的调用顺序正好 相反。先调用派生类的析构函数,再调用对象成 员的析构函数,最后调用基类的析构函数。
12.下列程序运行后输出为 #include <iostream.h> class A{ public: A(){cout<<"构造函数 A \n";} ~A(){cout<<"析构函数 ~A \n";} }; class B{ public: B(){cout<<"构造函数 B \n";} ~B(){cout<<"析构函数 ~B \n";} }; class C:public B,public A{ public: C():A(),B(){cout<<"构造函数 C \n";} ~C(){cout<<"析构函数 ~C \n";} }; void main() {C c1;}
VC第八章
数据库编程示例Enroll
教材P306
注册数据源 Enroll工程的设计与实现 1.使用AppWizard创建Enroll工程框架 2.使用ClassWizard操作记录集 使用ODBC的API函数直接修改数据 一般,编写ODBC程序主要步骤如下: 分配ODBC环境句柄 分配连接句柄 连接数据源 构造和执行SQL语句 取得执行结果 断开同数据源的连接 释放ODBC环境
使用MFC编制数据库管理程序
数据库概论 使用MFC对数据库编程 数据库编程示例Enroll DAO简介
数据库概论
什么是数据库? 数据库是数据的集合,它由一个或多个表组 成。每一个表中都存储了对一类对象的数据 描述和相应性质的数据集合。 若一个数据库只有一个表,则称之为简单数 据库。若数据库由多个相关的表组成,则称 其为关系数据库。关系数据库利用公共关键 字段将它的表联系起来
用DAO创建表 由于DAO类直接支持DDL,所以用DAO类创建表比 ODBC容易。DAO的CDaoTableDef类提供了对表结 构的定义,该类提供了创建表的成员函数。 下面的例子给出了一段用DAO类创建表的方法: #include "afxdao.h" …… CDaoDatabase daoDb; try { daoDb.Open("",FALSE,FALSE,"FoxPro 2.5;DATABASE=d:\\zwin");
DAO简介
什么是DAO DAO(Database Access Object)是直接使用 Microsoft的Jet数据库引擎来访问数据库的一种连接 库表与操作数据的方法。Microsoft Jet引擎为像 Access和Visual Basic这样的产品提供了数据直接 存取的操作引擎,因此专门适合于Microsoft开发的 数据库管理系统。其优点是处理简单、速度快,缺 点是不是全球通用的。
c#程序设计教程-第8章PPT课件
textBox1.Text = "这是我的第一个ActiveX控件!"; }
——在编写代码的过程中,也可以像调试窗体应用程序那样调试 控件程序,也可以运行控件程序,以观看其显示的效果。
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
第8章
ActiveX控件和自定 义组件开发
本章内容
8.1 一个简单ActiveX控件的开发 8.2 ActiveX控件 8.3 自定义组件
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
8.1.1 创建ActiveX控件程序
ActiveX控件可以简单理解为能够实现特定功能的“成品”控件。
(2)单击【确定】按钮,创建名为MyFirstActiveX的ActiveX控 件 程 序 。 然 后 在 打 开 的 界 面 中 添 加 一 个 Buttion 控 件 和 一 个 TextBox控件,并进行适当的设置:
8.1 一个简单ActiveX控件的开发 C#程序设计教程——蒙祖强编著
8.1.1 创建ActiveX控件程序 (3)在设计界面中双击【我的控件】按钮,进入该按钮的事件 处理函数,并编写相应代码,结果如下:
ActiveX控件可以用各种编程语言来开发,如C、C++,也包 括.NET中的C#、等。ActiveX控件通常以dll或ocx文件的形 式存在,它不能独立运行,必须依赖于其他程序,相应的这些程序 称为ActiveX控件宿主程序。
宿主程序在使用控件和组件时,不需要编译,只需要按照既定的格 式说明进行调用即可。这与使用函数或类不同。在使用函数或类时, 需要将它们的代码加入到程序中相应的位置,并在编译后才能调用。
VC内部培训资料——第8章 文档序列化
第8章文档序列化大多数应用程序都为用户提供了数据的保存功能,这些数据可能是电子表格、字处理文档、一组数据或图形等等。
从磁盘存储器上存取这些数据的工作往往是通过文件操作或者数据库操作来完成的。
关于数据库操作的内容,我们将在后面的章节中进行详细的介绍,在本章的内容中,我们主要讨论如何通过文件操作实现一般意义上的数据存取工作。
通过文件操作来实现数据的存取工作通常有两种工作方式:一种是使对象具有序列化;另一种方法就是直接使用CFile对象处理文件。
本章就将对这两部分内容分别做出详解。
8.1 序列化在MFC当中,对象的序列化功能主要是通过文档/视图结构中特有的文档对象的序列化机制来实现的。
本节,我们将详细介绍如何使用序列化机制来实现对象的序列化。
序列化,简单地说就是向一个持久性的存储媒体——如磁盘文件保存对象或读取对象的过程。
序列化分为两部分,当把应用程序数据以文件形式存储在系统磁盘中时,叫做序列化;当从磁盘文件中恢复应用程序数据的状态时,叫做反序列化,这两个部分的组合构成了Visual C++中的应用程序对象的序列化。
8.1.1 CArchive类和Serialize函数Visual C++应用程序中的序列化是通过CArchive类来实现的。
CArchive类总是与一个CFile对象相关联,CArchive类是作为CFile对象的输入输出流而设计的,如图8-00所示,它使用经过重载的C++流入(<<)和流出(>>)操作符从存储应用程序数据的文件中实现读取和写入数据,而将这些数据保存到磁盘文件中的工作由CArchive对象指示CFile对象来完成。
图8-00 CArchive类和CFile类可以实现序列化的类——即从CObject继承而来的类,有一个叫做Serialize的成员函数,序列化工作主要是在这个函数当中进行的。
当应用程序读取或写入文件时,文档对象的Serialize函数被调用,并传递用于从文件读取或向文件写入数据的CArchive对象。
VisualC程序设计基础教程ch08精品PPT课件
//利用base关键字调用基类Person的Display方法 base.Display(); Console.WriteLine("ID: {0}",this.id); }
AutCo#C程AD序计设算计机教辅程助设计
8.2 使用继承机制
清华大学出版社
AutCo#C程AD序计设算计机教辅程助设计
第8章 继承与多态
本章要点:
继承的概念 C#中的继承机制 虚方法与override 多态性
清华大学出版社
AutCo#C程AD序计设算计机教辅程助设计
8.1 什么是继承
清华大学出版社
一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。 通过继承,一个新建子类从已有的父类那里获得父类的特性。从另一角 度说,从已有的类(父类)产生一个新的子类,称为类的派生。类的继承 是用已有的类来建立专用类的编程技术。派生类继承了基类的所有特性 与功能,并可以对成员作必要的增加或调整。一个基类可以派生出多个 派生类,每一个派生类又可以作为基类再派生出新的派生类,因此基类 和派生类是相对而言的。一个派生类有且只能有一个基类,即C#不支持 多重继承机制。
同时基类与派生类也是一个成对的概念,一个孤立的类即不可能是 基类也不可能是派生类。
AutCo#C程AD序计设算计机教辅程助设计
8.2 使用继承机制
清华大学出版社
8.2.1 基类和派生类
C#中继承的语法格式如下: [访问修饰符] class <派生类名称> : <基类名称>
C#语言的继承机制除了要遵守上述语法规范外,还有如下规则: 派生类应当被看作是基类所具有的特性与功能的继承与扩展,而不是 简单的派生类“大于”基类; 派生类不能“选择性”的继承基类的属性与方法,必须继承基类的所 有特性与方法; 派生类可以在继承基类的基础上自由定义自己特有的成员; 基类的构造方法与析构方法不能被派生类继承,除此之外的其他成员 都能被继承,基类成员的访问方式不影响他们成为派生类的成员; 派生类中继承的基类成员和基类中的成员只是相同,并非同一个成员。
vc++8
Visual C++
第八章 资源和消息处理
中国地质大学信息工程学院 林伟华
1
本章主要内容
资源
资源编辑
菜单消息处理
自定义消息
前一页
休息
2
资源
资源:应用程序所能够使用的一类预定义工具 以及其他的一些对象
资 源
Accelerator(加速键):应用程序中所有加速键的定义 Bitmap(位图):程序中使用的位图 Cursor(光标):光标形状 Dialog(对话框):定义对话框模板 Icon(图标):应用程序各种图标 Menu(菜单):应用程序所有菜单 String Table(字符串表):提示信息字符串 ToolBar(工具栏):应用程序工具栏 Version(版本信息):程序版本描述信息等
休息 8
自 定 义 消 息
前一页
COMMAND消息响应 void CMyView::OnGraph() { //… } UPDATE_COMMAND_UI消息响应 void CMyView::OnUpdateGraph(CCmdUI * pCmdUI) { pCmdUI->SetRadio(TRUE); } pCmdUI->Enable(TRUE); pCmdUI->SetCheck(TRUE); pCmdUI->SetText(“ ”);
休息 6
菜 单 消 息
前一页
自定义消息
自 定 义 消 息
cppChp8-C++程序设计教程(第3版)(竞技版)-钱能-清华大学出版社
一切自定义操作符都是语言中操作符的重载. 操作符作用:让编译器理解人性化编程代码.从正 确性上讲并不是必要的.例如,Java不允许操作符 重载
11
4. 再论程序结构 ( Program Structure Restatement )
21:19:16
访问控制
成员函数 一般为公有public 公有的成员函数在类的外部可以被使用,
即外界可以调用成员函数. 数据成员 一般为私有private 私有的数据成员在外部不能被访问,即
外界不能访问对象的数据分量,而 只能由成员函数内部去处理. 公有和私有可任意设定 访问控制public和private是语言提供 给程序员的功能.
C++程序设计教程(第二版)
第八章 类 Chapter 8 Class
21:19:16
清华大学出版社 钱 能
1
21:19:16
类 类是一种可以作为交易的概念代 码.类是自定义的数据类型.类与应 用程序不同,类的功能虽然独立,但 不能独立启动,就象汽车零件那样.
类机制 要通过编程的方法来维护类的数据表 达,值范围和操作并不是简单的,因 为要限制一些操作只能让类自己来做, 以免发生问题时,无人敢对其负责. 类机制就是通过语言的规定性来实现 一些技术,使类具有数据封装,信息屏 蔽,多态等特征,起到数据类型的作 用,而达到方便编程的目的.
9
21:19:16
值返回与引用返回
值返回 返回临时表达式的值,例如:
Point operator+(const Point& a, const Point& b){ Point s; s.set(a.x+b.x, a.y+b.y); return s;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.窗口应用程序类:CWinApp类 窗口应用程序类:CWinApp类 每个应用程序有且只有一个应用程序对象, 每个应用程序有且只有一个应用程序对象,在运 应用程序对象 行程序中该对象与其它对象相互协调, 行程序中该对象与其它对象相互协调,该对象从 CWinApp类中派生出来。CWinApp类封装了初始化、 类中派生出来。 类中派生出来 类封装了初始化、 运行、终止应用程序的代码。 运行、终止应用程序的代码。
MFC2.0 & MS VC++1.5
添加了ODBC类,并且还支持OLE的性能 添加了ODBC类 并且还支持OLE的性能 ODBC OLE
MFC3.0 & VC++2.0
增添了对开发32位应用程序的支持 增添了对开发32位应用程序的支持 32
MFC4.0
包含了在Win95和 中大多数新的公共控件和DAO、 包含了在Win95和N中大多数新的公共控件和DAO、MAPI Win95 增强了对数据库应用程序的支持 利用DAO类通过编程语言来访问、 DAO类通过编程语言来访问 利用DAO类通过编程语言来访问、操纵和管理数据库 Internet也提供了强有力的支持 对Internet也提供了强有力的支持
8.1
MFC 概述
以层次结构组织 是用来编 写Windows 应用程序 C++类集 的C++类集 封装了大部分API函数 封装了大部分API函数 API 提供了图形环境下应用程序的框架 提供了创建应用程序的组件 提供了大量的基类供程序员根据不同的应用环境进行扩充 MFC 允许在编程过程中自定义和扩展应用程序中的类 较好的移植性, 较好的移植性,可移植于众多的平台
8.1
MFC 概述
MFC是用来编写 是用来编写Windows应用程序的 应用程序的C++类集,该 类集, 是用来编写 应用程序的 类集 类集以层次结构组织起来,其中封装了大部分 类集以层次结构组织起来,其中封装了大部分Windows API函数和 函数和Windows控件,它所包含的功能涉及到整个 控件, 函数和 控件 Windows操作系统。 操作系统。 操作系统 MFC不仅为用户提供了 Windows图形环境下应用程 不仅为用户提供了 图形环境下应用程 序的框架,而且还提供了创建应用程序的组件。 序的框架,而且还提供了创建应用程序的组件。
8.2
MFC类的组织结构及主要的类的简介 类的组织结构及主要的类的简介
中定义的部分函数的功能有时也可以通过MFC提供 在CWinApp中定义的部分函数的功能有时也可以通过 中定义的部分函数的功能有时也可以通过 提供 的全局函数来实现,这些全局函数一般都以 为前缀。 的全局函数来实现,这些全局函数一般都以Afx为前缀。 为前缀 例如调用AfxMessageBox 函数将弹出一个消息框,其功能与 函数将弹出一个消息框, 例如调用 CWinApp中的 中的DoMessageBox 相同。AfxMessageBox原型如下: 相同。 原型如下: 中的 原型如下 int AfxMessageBox ( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ) 还可用API函数 函数 还可用 MessageBox
MFC4.21
8.1
MFC 概述
MFC5.0增强了对数据库和Internet的支持,可使用 增强了对数据库和 的支持, 增强了对数据库 的支持 可使用ODBC 类和ODBC驱动程序来访问提供 驱动程序来访问提供ODBC支持的数据库中的数 类和 驱动程序来访问提供 支持的数据库中的数 可以通过数据访问对象( 据;可以通过数据访问对象(DAO)类通过编程语言来访 ) 问和操纵数据库中的数据并管理数据库、 问和操纵数据库中的数据并管理数据库、数据库对象与结 这些支持主要包括以下几个部分: 构。这些支持主要包括以下几个部分: •Win32 Internet API使Internet成为应用程序的一部分并简化 使 成为应用程序的一部分并简化 了对Internet服务的访问 了对 服务的访问 •Activex文档可以显示在整个 文档可以显示在整个Web浏览器或 浏览器或OLE容器的整个 文档可以显示在整个 浏览器或 容器的整个 客户窗口中 • Activex控件可以用在 and Embedding,对象连接与 控件可以用在Internet和桌面应用程序中可以使用 控件可以用在 和桌面应用程序中可以使用 Object Linking , CHttpServer、CHttpFilter、ChttpServerContext和 、 、 和 嵌入,简称OLE技术。OLE 不仅是桌面应用程 技术。 嵌入,简称 技术 CHttpFilterContext类来建立动态 ,以便为Web页面增添 页面增添 序集成,类来建立动态DLL,以便为 序集成,类来建立动态 而且还定义和实现了一种允许应用程 序作为软件“对象” 数据集合和操作数据的函 序作为软件“对象”(数据集合和操作数据的函 功能
2.线程基类:CWinThread类 线程基类:CWinThread类 所有线程的基类,可直接使用。CWinApp类就是从 所有线程的基类,可直接使用。CWinApp类就是从 CWinThread类中派生出来的 CWinThread类中派的类的简介 类的组织结构及主要的类的简介
4.文档/视类 文档/ 文档对象由文档模板对象创建, 文档对象由文档模板对象创建,管理应用程序的 由文档模板对象创建 数据。视对象表示一个窗口的客户区 表示一个窗口的客户区, 数据。视对象表示一个窗口的客户区,显示文档数据 并允许用户与之交互。 并允许用户与之交互。
8.2
MFC类的组织结构及主要的类的简介 类的组织结构及主要的类的简介
8.2
MFC类的组织结构及主要的类的简介 类的组织结构及主要的类的简介
CObject
CException CFile CCmdTarget
消息映射体系的一个基类 CDC CPaintDC CClientDC CGdiObject CPen CBrush
CWinThread CWinApp
CWnd CFrameWnd
MFC还很好地保持了程序的向下兼容性 MFC还很好地保持了程序的向下兼容性
8.1
MFC 概述 应用程序中非图形部分的类
MFC1.0 & MS C/C++7.0 GUI功能的Windows相关类 GUI功能的Windows相关类 功能的Windows MFC2.0 & MS VC++1.0 在1.0基础上增添了一些应用程序 1.0基础上增添了一些应用程序
8.2 8.2.2
MFC类的组织结构及主要的类的简介 类的组织结构及主要的类的简介
根类 — CObject
对象的建立
MFC中多数类和用户自定 MFC中多数类和用户自定 义子类的根类, 义子类的根类,是抽象
对象的删除 串行化支持 绘图和 打印类 输出(设备相关) 输出(设备相关)类 绘图工具类
基类。 基类。它提供了许多编 程所需的公共操作。 程所需的公共操作。 运行时信息 对象诊断输出 应用程序和线程支持类 命令相关类 文档类 文档模板类 视类(体系结构) 视类(体系结构) 框架窗口(体系结构) 框架窗口(体系结构) 框架窗口类(窗口) 框架窗口类(窗口) 视类(窗口) 视类(窗口) 对话框类 控件条类
1.命令相关类 1.命令相关类
应用程序体系结构类
应用程序体 系结构类
编写程序的任务是 填充框架, 填充框架,添加应 用程序专用的功能
用于构造应用程 序框架的结构, 序框架的结构, 提供多数应用程
2.窗口应用程序类 2.窗口应用程序类 3.文档/ 3.文档/视类 文档 4.线程基类 4.线程基类
序公用的功能
简述窗口类( 简述窗口类(主框架类 CFrameWnd 或CMainFrame)、 )、 视类( )、文档类 视类(Cview)、文档类(CDocument)和应用程序 )、文档类( ) 类(CwinApp)的主要功能: )的主要功能:
主框架类:挂接菜单,状态,工具栏,响应菜单命令, 主框架类:挂接菜单,状态,工具栏,响应菜单命令,为CView 提供容器(即视窗口总是位于框架的客户区内) 提供容器(即视窗口总是位于框架的客户区内)等。 视类:作显示文档或图形图像的主要区域, 视类:作显示文档或图形图像的主要区域,可接收菜单命令和 鼠标消息。 鼠标消息。 文档类: 关联在一起的, 文档类:和CView关联在一起的,主要用于存取数据(如读文 关联在一起的 主要用于存取数据( 存文件) 件,存文件)等。 应用程序类:完成应用程序的初始化、运行和终止( 应用程序类:完成应用程序的初始化、运行和终止(不断执行 消息循环,直到接收到WM_QUIT消息)。基于框架生成的应 消息)。 消息循环,直到接收到 消息)。基于框架生成的应 派生的类的对象。 用程序必须有且仅有一个从 CWinApp 派生的类的对象。在创 建窗口之前先构造该对象。 建窗口之前先构造该对象。
彼此进行“ 数)彼此进行“连接”的机制,这种连接机制和 彼此进行 连接”的机制, 协议称为部件对象模型。 协议称为部件对象模型。
8.2
MFC类的组织结构及主要的类的简介 类的组织结构及主要的类的简介
8.2.1 MFC类的组织结构 类的组织结构 MFC库中的类按层次关系划分类:(P180) 库中的类按层次关系划分类: P180) 库中的类按层次关系划分类 (1) 根类:CObject ) 根类: (2) 应用程序体系结构类 ) (3) 窗口、对话框和控件类 ) 窗口、 (4) 绘图和打印类 ) (5) 简单数据类型类 ) (6) 数组、列表和映射类 ) 数组、 (7) 文件和数据库类 ) (8) Internet和网络工作类 ) 和网络工作类 (9) OLE类 (Object Linking and Embedding ) ) 类 (10)调试和异常类 )