VC++讲义 第07章

合集下载

vc++第7章

vc++第7章

2
7.1 文档视图结构
7.1.1 概述 有两种情况不宜采用文档视图结构: 不是面向数据的应用或数据量很少的应用程序,不 宜采用文档视图结构。如一些工具程序包括磁盘扫 描程序、时钟程序,还有一些过程控制程序等; 不使用标准的窗口用户界面的程序,像一些游戏等。
3
7.1 文档视图结构
7.1.2 文档模板 文档模板负责创建文档、视图和框架窗口。 MFC提供了一个文档模板类CDocTemplate支持文档 模板。文档模板类是一个抽象的基类,它定义了文档模 板的基本处理函数接口。由于它是一个抽象基类,因此 不能直接用它来定义对象而必需用它的派生类。对一个 单文档界面程序,使用CSingleDocTemplate(单文档 模板类),而对于一个多文档界面程序,使用 CMultipleDocTemplate。
18
7.2 文档串行化和文件操作
7.2.3 简易文本编辑器 else{ while(1){ try{ ar>>item; lines.AddTail(item); nCount++; } catch(CArchiveException *e){ if(e->m_cause!=CArchiveException::endOfFile){ TRACE0("Unknown exception loading file!\n"); throw; } else{ TRACE0("End of file reached...\n"); e->Delete(); } break; }} nLineNum=nCount; }}
6
7.1 文档视图结构
7.1.4 视图类 视图本质在Windows中就是一个窗口,也就是一个可 视化的矩形区域。视图必需依附于一个框架(SDI中是 MainFrame,MDI是ChildFrame)。视图规定了用户 查看文档数据以及同数据交互的方式。 视图是从CView派生出来的类,提供了 OnInitialUpdate成员函数来初始化视图类的数据成员。 视图类包含一个OnDraw方法,当需要重画视图时,该 函数就会被调用。当窗口或窗口的一部分变成无效的话, 操作系统就会向窗口发送一条WM_PAINT消息。窗口 接收到该消息之后,调用OnPaint完成窗口绘制工作。 图作为一个子窗口,可以处理消息。但是应用程序运行 时,除了视图,还有应用程序对象、主框架窗口、文档 等,它们都是可以处理消息的。

C程序设计课件第7章

C程序设计课件第7章

{ rational r;
r.den=a.den*b.den;
r.num=a.num*b.den+a.den*b.num;
r.optimi();
return r; }
16
rational operator-(rational a, rational b) //定义作为友元函数的重载
函数
{ rational r;
载运算符“-”用于求两段5时.2间的向差上。 类型转换
#include<iostream.h> class Time { public:
Time(); Time(int h,int m=0); friend Time operator+( Time &t1,Time &t2); friend Time operator-(Time &t1,Time &t2); void Show(); private:
4
【例7-1】对“+”运算符进行重载来实现两个Complex类对象的加法运算。
#include <iostream>
#include <string> using namespace std;
5.2 向上类型转换
class Complex
{public:
Complex(double r=0,double i=0){ real=r; imag=i; }
第7章运算符重载
本章学习要点
❖ 为什么要进行运算符重载 ❖ 运算符重载的方法 ❖ 重载运算符的规则 ❖ 运算符重载函数作为类成员函数和友元函数 ❖ 重载双目运算符 ❖ 重载单目运算符 ❖ 重载流插入运算符和流提取运算符 ❖ 不同类型数据间的转换

天学通vc++第7章PPT教学课件

天学通vc++第7章PPT教学课件
9
地图信息模块设计
该模块主要是对电子地图的操作,这些操作是通 过程序主界面上的两个工具栏控制的,上面的工具 栏控制着地图的放大、缩小、漫游、图片的保存、 测量两点间的距离等操作。左侧的工具栏主要是控 制地图信息的显示,通过工具栏上的按钮来加载不 同的图层来显示医疗机构、政府部门、人文部门、 村庄和学校
4
数据库设计
本系统数据库名称为 HangZhouBus。数据库 HangZhouBus中包含日志表Action_Log、景点属 性表AttributeSet、公交车线路表BUS、电子地图站 点表Map_Station、图层表Species、站点表 STATION和用户表USER共7个表。
10
PPT教学课件
谢谢观看
Thank You For Watching
7
公交信息维护模块
该模块要求用户登录系统后可以进行公交信息的 维护,不登录这些操作都被禁用。包括单个站点和 整条线路的维护操作。具体实现单个站点的修改及 删除操作;对整条线路的添加及删除操作;给选中 景点添加属性和图片,这些功能可以保证系统的即 时更新。另外,还实现了查询系统日志信息。
8
图7-3 添加线路界面
系统分析
通过调查分析,得出广大市民对城市信息查询 的一些要求:能进行基本的公交信息查询,它可以 解决市民出行乘公交车时所遇到的问题;能进行公 交站点的维护,以适应不断规划的城市交通路线; 配以电子地图,能够给用户一个比较直观、具体的 感觉。本系统仅是为了实现这些功能而设计的。
2
系统设计
结合需求分析,系统前端开发工具采用Visual C++ 6.0,后台数据库系统采用大型数据库系统SQL Server 2005,系统的运行平台为Windows。在 Visual C++ 6.0的开发平台上,嵌入GIS功能组件 (ESRI的MapObjects),充分发挥该开发工具的 灵活性与MapObjects在空间数据管理方面的优势。 开发的系统实现公交信息查询、公交信息维护、地 图信息查询、操作等功能。

VC++讲义第07单元 类与对象(I)

VC++讲义第07单元 类与对象(I)

第7单元类和对象(I)本单元教学目标介绍面向对象程序设计方法的基本原理以及类和对象的概念。

教学要求掌握面向对象的程序设计思想,类和对象的概念,以及类的声明方法和对象的引用。

授课内容7.1 面向对象的程序设计在面向对象的程序设计技术(OOP: Object Oriented Programming)出现前,程序员们一般采用面向过程的程序设计方法。

面向过程的程序设计方法采用函数(或过程)来描述对数据结构的操作,但又将函数与其所操作的数据分离开来。

作为对现实世界的抽象,函数和它所操作的数据是密切相关、相互依赖的:特定的函数往往要对特定的数据结构进行操作;如果数据结构发生改变,则必须改写相应的函数。

这种实质上的依赖与形式上的分离使得用面向过程的程序设计方法编写出来的大程序不但难于编写,而且难于调试和修改。

面向对象程序设计从所处理的数据入手,以数据为中心而不是以功能为中心来描述系统。

数据相对于功能而言具有更强的稳定性。

面向对象程序设计与结构化程序设计最大的区别就在于,前者首先关心的是所要处理的数据,而后者首先关心的是功能。

面向对象程序设计是一种围绕真实世界的概念来组织模型的程序设计方法,它采用对象来描述问题空间中的实体。

关于对象这一概念,目前还没有统一的定义。

一般的认为,对象是包含现实世界物体特征的抽象实体,反映了系统为之保存信息和(或)与之交互的能力。

对象是一些属性及服务的封装体,在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”这一公式来表达。

类是具有相同操作功能和相同的数据格式(属性)的对象的集合,可以看作抽象数据类型的具体实现。

从外部看,类的行为可以用新定义的操作(方法)加以规定。

类是对象集合的抽象,规定了这些对象的公共属性和方法;对象是类的一个实例。

例如,苹果是一个类,而放在桌上的那个苹果则是一个对象。

对象和类的关系相当于一般的程序设计语言中变量和变量类型的关系。

消息是向某对象请求服务的一种表达方式。

VC++第七章

VC++第七章

7.1.3 结构变量的使用 1.结构体变量的操作 同类型的两个结构变量之间可以赋值,就是复制所 有成员值。 两个结构变量之间不能进行关系运算,即不能判等、 大于、小于等计算。 不能用cin和cout对一个结构变量直接输入或输出, 只能对其基本类型的成员进行输入和输出。 2.结构体成员的访问 要访问某个结构变量的某个成员,格式为: <结构变量>.<成员名> 其中,“.”称为成员运算符,其作用是指定结构变 量中的某个成员。
7.1.1 结构类型的定义 定义一个结构类型要用一条结构说明语句,格式如下: struct <结构类型名> { <成员类型1> <成员名1>; <成员类型2> <成员名2>; ... <成员类型n> <成员名n>; }; 其中,struct是定义结构类型的关键字。<结构体类型名> 是用户命名的标识符。成员的数据类型可以是基本数据类 型以及基本类型的数组,也可以是已定义过的某种数据类 型,以及这些类型的数组。若几个成员具有相同数据类型, 各成员名之间用逗号隔开,就像定义同一类型的多个变量 一样,只是不能初始化。 从逻辑上看,各个成员之间是无序的。但从数据存储来看, 一个结构变量的各成员是按说明的次序来存储的。 定义一个结构类型是一条完整的说明语句,所有成员要用 一对花括号括起来,不能忘记最后用分号结束。
7.1.4 结构的数组 一个结构类型不但可以定义单个变量,也能定义数组。结构类型的数 组与基本类型的数组基本相同。 1.结构数组的定义及初始化 结构数组的定义与基本类型数组的定义格式一样。结构数组中的每个 元素作为一个结构变量。初始化需要一个花括号,其中再嵌套各元素 的值。例如: struct Student{ char num[12],name[20]; char sex; float mathscore; }; ... Student st[2] = {{"001","Wangping",'f',84}, {"002","Zhaomin",'m',64}}; 定义一个结构数组时,就为多个结构元素分配了存储空间。如果未列出 后面元素的初始化,就用0来初始化,与普通数组一样。 2.结构数组的使用 先用数组的下标指定一个元素,再用成员运算符指定结构的成员。 例7-2 对一组学生的一门课程成绩进行统计并输出。

VC课件 (6)

VC课件 (6)

7.1.2 类的成员 类的成员(3)
7.1.2.3 只读字段
只读字段用关键字readonly声明,顾名思义,这样的字段是只可读出,不 声明,顾名思义,这样的字段是只可读出, 只读字段用关键字 声明 可写入的,这一点和常量相同。 可写入的,这一点和常量相同。 对只读字段赋值只能在如下情况下进行: 对只读字段赋值只能在如下情况下进行: 声明只读字段的同时初始化 在构造函数和静态构造函数中初始化 在上述的情况下甚至可以多次赋值,除此以外, 在上述的情况下甚至可以多次赋值,除此以外,只读字段只能读出不能 修改了。也不能将它们用作out参数或者 参数。 参数或者ref参数 修改了。也不能将它们用作 参数或者 参数。如果只读字段没有初始 就自动赋以默认值。 化,就自动赋以默认值。 只读字段和常量的差别: 只读字段和常量的差别: 只读字段不具备static特征,只读字段属于实例。 特征, 只读字段不具备 特征 只读字段属于实例。 只读字段可以在运行阶段确定值,常量是在编译阶段确定值, 只读字段可以在运行阶段确定值,常量是在编译阶段确定值,因此可以 用变量表达式对只读字段赋值。 用变量表达式对只读字段赋值。 只读字段可以是任何类型。 只读字段可以是任何类型。 const可以修饰局部变量,但readonly不能修饰局部变量。 可以修饰局部变量, 不能修饰局部变量。 可以修饰局部变量 不能修饰局部变量
7.1.2 类的成员 类的成员(2)
7.1.2.2 实例字段和静态字段
C#中有两种字段,属于具体对象的实例字段和属于类的静态字段。 中有两种字段,属于具体对象的实例字段和属于类的静态字段。 中有两种字段 字段默认为实例字段。 字段默认为实例字段。 假设有一个类X, 中有一个实例字段 一个静态字段s; 中有一个实例字段t, 假设有一个类 ,X中有一个实例字段 ,一个静态字段 ;从X产 产 个对象, 生100个对象,那么每个对象都有一个字段 ,存储器中有 个对象 那么每个对象都有一个字段t,存储器中有100个t, 个, 但是100个对象共享 个静态字段 ,存储器中只有 个s。 个对象共享1个静态字段 但是 个对象共享 个静态字段s,存储器中只有1个 。 静态字段要用关键字static声明,例如:static int Total; 声明, 静态字段要用关键字 声明 例如: ; 静态字段属于类,所以使用静态字段要用“类名.静态字段 静态字段” 静态字段属于类,所以使用静态字段要用“类名 静态字段”这样 的形式。 的形式。 C#中还有其它静态成员,例如静态方法,static修饰的成分的作用 中还有其它静态成员, 中还有其它静态成员 例如静态方法, 修饰的成分的作用 和用法. 和用法 静态字段能被静态方法和实例方法所访问。 静态字段能被静态方法和实例方法类修饰符有:abstract、public、protected、internal、private、new、 、 、 、 、 、 、 sealed。 一个类声明可以包含多个类修饰符,但是不能重复。 。 一个类声明可以包含多个类修饰符,但是不能重复。 类修饰符: 用来指示该类是抽象类, 类修饰符:abstract用来指示该类是抽象类,抽象类是一种没有完全实现的 用来指示该类是抽象类 它不能产生对象,只能被继承;修饰符public、protected、private、 类,它不能产生对象,只能被继承;修饰符 、 、 、 internal是访问控制符,用来规定外界调用该类成员权限;new用作类修饰 是访问控制符, 是访问控制符 用来规定外界调用该类成员权限; 用作类修饰 符只能修饰嵌套的类,具有隐藏同名成员的作用; 符只能修饰嵌套的类,具有隐藏同名成员的作用;sealed修饰符指出该类 修饰符指出该类 是最终类, 不能被继承。 是最终类,即,不能被继承。 class:是关键字,是声明类的必须的符号。 :是关键字,是声明类的必须的符号。 类名:是类设计者指定的标识符。 类名:是类设计者指定的标识符。 基类:如果正在定义的类需要从另一个类中继承所有的成员, 基类:如果正在定义的类需要从另一个类中继承所有的成员,被继承的 类就是基类,引入基类时,在类名和基类之间加上冒号运算符“ 类就是基类,引入基类时,在类名和基类之间加上冒号运算符“:”,接 口也是一种基类。 口也是一种基类。 类体:包括类的数据成员、表现这些成员行为的方法、 类体:包括类的数据成员、表现这些成员行为的方法、以及成员的修饰 类体中的所有内容置于一对大括号“ 和 之间。 符,类体中的所有内容置于一对大括号“{”和“}”之间。 之间

C语言程序设计教程第7章

C语言程序设计教程第7章

C语言程序设计教程第7章《C语言程序设计教程》第7章是关于数组和指针的内容。

本章从数组的定义、初始化、访问等基础知识开始讲解,然后介绍了二维数组、多维数组和字符数组,并通过具体的示例代码进行讲解。

此外,本章还讲解了指针的概念和用法,包括指针的定义、指针的运算、指针与数组的关系等内容。

首先,本章介绍了数组的定义和初始化的方法。

数组是由相同类型的数据元素组成的有序集合,使用方括号来定义数组的长度。

数组可以通过下标来访问和修改元素的值。

此外,本章还介绍了数组初始化的方法,包括静态初始化和动态初始化。

然后,本章详细讲解了二维数组和多维数组的概念和使用方法。

二维数组可以看作是由多个一维数组组成的,可以通过两个下标来访问和修改元素的值。

多维数组与二维数组类似,只是多维数组可以有更高维度的数组。

本章通过示例代码演示了如何定义和使用二维数组和多维数组。

接下来,本章介绍了字符数组的概念和使用方法。

字符数组是由字符组成的一维数组,可以用于存储和处理字符串。

本章通过示例代码演示了如何定义、初始化和使用字符数组,包括字符串的输入、输出和处理。

最后,本章详细讲解了指针的概念和用法。

指针是一种特殊的变量,可以存储变量的地址。

本章介绍了指针的定义和初始化的方法,以及指针的运算,包括指针的加法、减法和比较操作。

本章还讲解了指针与数组的关系,包括指针与一维数组的关系、二维数组的关系和字符数组的关系。

本章通过示例代码演示了指针的使用方法,包括指针与数组的遍历、指针与字符串的处理等。

总之,第7章《数组和指针》是《C语言程序设计教程》中比较重要和基础的章节。

通过学习本章的内容,读者可以了解数组和指针的概念和用法,掌握数组和指针的定义、初始化、访问等基本操作,以及掌握二维数组、多维数组和字符数组的使用方法。

通过本章的学习,读者可以更好地理解和运用C语言的数组和指针特性,提高自己的编程技能。

C语言讲义第七章

C语言讲义第七章
Conversion specifications
Variables list
CHAPTER7:Input
& Output
Page7-8
Characters
Argument type; Printed ecimal number int, unsigned octal number (without a leading 0) int unsigned hexadecimal number int unsigned decimal number int single character char *; print characters from the string until a ‘\0’ or the number of characters given by the precision
c语言讲义第七章c语言讲义c语言编程软件c语言入门c语言程序设计c语言教程c语言编译器c语言入门经典c语言自学数据结构c语言版
Chapter7
Input & Output
CHAPTER7:Input
& Output
2007.6.11
Page7-1
7.1 Standard Input and Output 7.2 Formatted Output-Printf 7.3 Variable-length Argument Lists 7.4 Formatted Input – Scanf 7.5 File Access 7.6 Error Handling-Stderr and Exit 7.6 Line Input and Output 7.8 Miscellaneous Functions
CHAPTER7:Input

C教程 从入门到精通 chap07

C教程 从入门到精通 chap07
• 方法是在定义好基类之后,在定义派生类时
把基类用逗号隔开
第154页/共36页
多重派生
第165页/共36页
重载
•函数重载 •运算符重载
第176页/共36页
函数重载
• 函数重载是指同一个函数名可以对应多个函数的实
现,每一种实现对应着一个函数,这些函数具有相同 的名字,但是参数的类型不一样,或者参数的个数 不相同。这就是函数重载。
第65页/共36页
用公有方式继承基类的私有数据成 员的方法计算一个矩形的面积
第76页/共36页
用私有方式继承基类的私有数据成 员的方法计算一个矩形的面积
第87页/共36页
关于protected
• 被声明为protected的成员在类的内部是公有的,但
是在类的外部则是私有的。 –派生类中可以直接访问基类的受保护的成员,但是在类的
成员数据进行初始化的话,那么就用派生类 的构造函数对它们进行初始化。
第110页/共36页
计算一个立方体的体积
第112页/共36页
调用基类的构造函数
第132页/共36页
派生类和基类构造函数与析构函数 的执行次序
第143页/共36页
多重派生
• 在类的继承过程中,使用一个以上的基类派
生出一个派生类。
公有数据成员都会成为派生类的公有数据成员,而基类的 私有数据成员仍然保持它的私有特性,也就是说只能被基 类定义的成员函数所访问,而不能被派生类的任何成员函 数所访问。同样,基类的所有私有成员函数派生类也不能 够访问。
–如果以private的方式继承一个类,那么基类的所有数据
成员都会变成派生类的私有成员,不论这个成员在基类中 是私有的还是公有的。这时派生类的成员仍然可以访问它 们,但是程序其他部分的代码不能够访问它们。

VC07面向对象程序设计

VC07面向对象程序设计

上页 返回 下页
• 类具有属性,它是对象特征的抽象,用数 据结构来描述类的属性。类具有操作,它 是对象行为的抽象,用操作名和实现该操 作的方法来描述。当用V C++描述时,相同 类的对象具有相同的属性和行为,它把对 象分为两个部分:数据(相当于属性)和 对数据的操作(相当于行为)。 • 对象的抽象是类,类的具体化就是对象, 也可以说类的实例是对象。
上页 返回 下页
//②定义了Point类型的二个对象Q1和Q2
2、对象的使用
• 对象具有类定义的所有成员及成员函数,一般通过运算符 “.”来访问。其一般形式为: • 对象名. 成员名 • 对象名. 成员函数名 (实参表) • 对指针对象其使用形式为: • 指针对象->成员名 • 指针对象->成员函数名 (实参表) • 对象可以作为函数参数,此时是以值方式传递,同样也可 以进行引用或地址传递。另外对象还可以作为函数的返回 值,以及在赋值语句中被复制。
上页 返回 下页
• (2)面向对象程序设计的特点
• ① 在面向对象程序设计中,对象是构成软件系统的基本 单元,并从相同类型的对象中抽象出一种新型的数据类 型——类,对象只是类的实例。 • ② 面向对象程序设计提供了类的继承性,可通过对一个 被称为基类的类增添不同的特性来派生出多种被称为派生 类的特殊类,从而使得类与类之间建立了层次结构关系, 为软件复用提供了有效的途径。 • ③ 面向对象程序设计支持多态性。不同的对象,收到同 一消息可以产生不同的结果,这种现象称为多态性。 • ④ 由于对象与对象之间存在着一定的联系,这种联系通 过消息的传递来实现。
上页 返回 下页
7.2 类和对象
• • • • • • 7.2.1 类和对象的概念 7.2.2 定义类 7.2.3 成员函数 7.2.4 对象的定义和使用 7.2.5 类与结构 7.2.6 类的作用域

vc07

vc07
2012年7月1日9时35分 《面向对象程序设计与Visual C++6.0教程》 7
联编分类:
●按照联编进行的阶段的不同可以分为:
静态联编 动态联编
●两种联编过程分别对应C++面向对象技术多态
特性的两种实现方式。
2012年7月1日9时35分
《面向对象程序设计与Visual C++6.0教程》
8
1. 静态联编
2012年7月1日9时35分
《面向对象程序设计与Visual C++6.0教程》
29
函数重载的分类
函数重载包括: ●成员函数重载 如:构造函数重载 一般成员函数重载 ●普通函数重载 如:求立方体函数重载
为加深理解,程序直接在Visual C++6.0环境下调试运行
函数重载实例
2012年7月1日9时35分 《面向对象程序设计与Visual C++6.0教程》 30
25
7.4 抽象类
●抽象类(abstract class)是一种特殊的类, 主要为一类族提供统一的操作接口。 ●抽象类专门用于基类派生新类,自身无 法实例化。
●抽象类是带有纯虚函数的类,通过抽象 类为一类族提供一个公共的接口,这个接口 就是纯虚函数。
2012年7月1日9时35分 《面向对象程序设计与Visual C++6.0教程》 26
能建立抽象类对象 ●建立抽象类是为了通过它多态的使 用其成员函数 ●抽象类的构造函数与析构函数不应 调用纯虚函数 抽象类的实例
2012年7月1日9时35分 《面向对象程序设计与Visual C++6.0教程》 28
7.5 函数重载

VC++07

VC++07
13
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; }
29
派 生 类 的 构 , 析 构 函 数 造
28
派 生 类 的 构 , 析 构 函 数 造
单一继承时的构造函数
派生类名::派生类名 基类所需的形参 派生类名 派生类名(基类所需的形参, 派生类名 基类所需的形参, 本类成员所需的形参):基类名 参数) 基类名(参数 本类成员所需的形参 基类名 参数 { 本类成员初始化赋值语句; 本类成员初始化赋值语句; }; ; 如:C::C(int i,int j):B(i)
私有继承举例
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; };

VC语言_VCchap7

VC语言_VCchap7

这种形式的定义的一般形式为
struct 结构体名 { 变量定义表列 }变量名表列;
6
(3) 直接定义结构体类型变量 其一般形式为 struct //注意没有结构体类型名 { 变量定义表列 } 变量名表列; 这种方法虽然合法,但很少使用。提倡先构 造类型后,再定义变量的方法。关于结构体 类型,有几点要说明:
23
7.2.2 对共用体变量的访问方式
不能直接引用共用体变量,而只能引用共用体变量中的成 员。例如,下面的引用方式是正确的: a.i (引用共用体变量中的整型成员i ) a.ch(引用共用体变量中的字符型成员ch ) a.d (引用共用体变量中的双精度型成员d ) 同样也不能直接使用共用体变量输入或输出,例如 cout<<a; 应该写成cout<<a.i;或cout<<a.ch;等。
25
例7.7 设有若干个人员的数据,其中有学生和教师。学生的 数据中包括: 姓名、号码、性别、职业、年级。教师的数 据包括: 姓名、号码、性别、职业、职务。可以看出,学 生和教师所包含的数据是不同的。现要求把它们放在同一 表格中,见图7.13。
图7.13
26
如果job项为s(学生),则第5项作为class(年级)使用。 如果job项是t(教师),则第5项为position(职务)使用。 显然对第5项可以用共用体来处理(将class和position放在一 个共用体结构中)。 要求输入人员的数据,然后再输出。为简化起见,只设两 个人(一个学生、一个教师)。
定义数组stu时,也可以不指定元素个数,即 写成以下形式:
Student Stu[ ]={{10101,″Li Lin″,′M′,18,87.5,″103 Beijing Road″}, {10102,″Zhang Fun″,′M′,19,99,″130 Shanghai Road″}, {10104,″Wang Min″,′F′,20,78.5,″1010,Zhongshan Road″}};

vc07多态性PPT精品文档45页

vc07多态性PPT精品文档45页

11.01.2020
《面向对象程序设计与Visual C++6.0教程》
6
7.2 联编
● C++采用联编(binding)技术来支持多态 性。
●多态性的实现过程中,确定调用哪一个同名 函数的过程就是联编,又称为绑定(有些文 献称为编联或束定等)。
●联编是指计算机程序自身彼此关联的过程, 也就是将一个标识符(函数名)和一个存储 地址联系在一起的过程。
● 成员函数一旦被声明为虚函数,则无论该类 被继承了多少层,在各层次的派生类中,该函数都 保持虚函数的特性;
● 在派生类中重新定义该函数时,可以省略关 键字virtual。
11.01.2020
《面向对象程序设计与Visual C++6.0教程》
18
2.虚函数的调用
实现动态联编方式的前提:
●先要声明虚函数 ●类之间满足赋值兼容规则 ●通过指针与引用来调用虚函数
11.01.2020
《面向对象程序设计与Visual C&意:
●当类的某成员函数被声明为虚函数后, 派生类的相应成员函数就具有多态性。
●在派生类中重新定义虚函数时,必须 保证函数的返回值类型、参数类型与基类 中该虚函数的声明完全一致。
第7章 多态 性
11.01.2020
《面向对象程序设计与Visual C++6.0教程》
1
本章主要内容:
●多态的实现类型 ●多态性实现的相关技术 ●虚函数的定义和使用 ●纯虚函数与抽象类 ●函数重载和运算符重载
11.01.2020
《面向对象程序设计与Visual C++6.0教程》
2
7.1 多态性的实现类型
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
该函数如果创建成功,该函数返回TRUE,否则返回FALSE。
第一个参数lpszText指定了控件显示的正文。
第二个参数dwStyle指定了静态正文控件的风格,可以设为下列值的组合:
WS_CHILD指定该控件是一个子窗口
WS_VISIBLE指定该控件可显示
WS_DISABLED指定该控件不可显示
SS_BLACKFRAME指定一个具有与窗口边界同色的框(缺省为黑色)
3.编辑框控件
编辑框控件可以接受用户的输入和编辑。在编辑框中,用户可以输入文字、数字,并能用剪切、粘贴、拷贝、删除等操作来编辑用户的输入,编辑框既可以是单行的,也可以是多行的。当该控件获得焦点时,在其编辑框的内部会出现一个闪烁的光标,类似于编辑WORD文档时出现的光标,但是它绝不能像WORD一样可以允许用户插入表格和图片等,编辑框控件只能接受纯文本形式的输入。
如何在一个CButton类中来区分这几种不同的按钮控件呢?这就要通过按钮风格(Button Style)。关于按钮风格会在讲述该类的Create函数中有所介绍。
MFC的CButton类封装了按钮控件。CButton类的成员函数Create负责创建按钮控件,还是函数原形如下:
BOOL Create( LPCTSTRlpszCaption, DWORDdwStyle, const RECT&rect, CWnd*pParentWnd, UINTnID);
下面给出常用的两种方案:如果想要创建一个普通的单行编辑框,应指定风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP |WS_BORDER|ES_LEFT|ES_AUTOHSCROLL,这将创建一个带边框、左对齐正文、可水平滚动的单行编辑器;如果要创建一个普通多行编辑框,还要附加ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL |WS_HSCROLL| WS_VSCROLL风格,这将创建一个可水平和垂直滚动的,带有水平和垂直滚动条的多行编辑器。
SS_NOTIFY使控件能向父窗口发送鼠标事件消息
SS_RIGHT右对齐正文,可以回绕
SS_WHITEFRAME指定一个具有与窗口背景同色的框(缺省为白色)
SS_WHITERECT指定一个具有与窗口背景同色的实心矩形(缺省为白色)
若要在静态文本框中显示光标、图标、位图或元文件,还可以设置为下列值:
SS_BITMAP使控件显示一个在资源中定义的位图
MFC的CEdit类封装了编辑框控件。CEdit类的成员函数Create负责创建按编辑框控件,该函数原形如下:
BOOL Create( DWORDdwStyle, const RECT&rect, CWnd*pParentWnd, UINTnID);
该函数如果创建成功,该函数返回TRUE,否则返回FALSE.
CEdit类常用的成员函数:
GetSel:获得编辑框控件中当前选择的其始字符和终止字符的位置。
SetSel:选择编辑框控件中的一个字符范围。
GetLineCount:获得多行编辑框的行数。
Undo/Clear/Copy/Cut/Paste:剪贴板操作,分别用于撤消上一次键入、清除编辑框中被选择的正文、把在编辑框中选择的正文拷贝到剪贴板中、清除编辑框中被选择的正文并把这些正文拷贝到剪贴板中、将剪贴板中的正文插入到编辑框的当前插入符处。
7.1对话框及控件的介绍
对话框是一个真正的窗口,它不仅可以接收消息,而且还可以被移动和关闭,甚至可以在它的客户区中进行绘图。也可以将对话框看成一个大容器,在它上面能够放置各种各样的标准及扩展控件,使程序支持用户输入的手段更加丰富。
7.1.1常用控件介绍
由于所有的控件类都是由CWnd类派生来的,因此,控件实际上也是窗口.控件通常是作为对话框的子窗口而创建的,控件也可以出现在视图窗口、工具条和状态条中.控件(Control)是独立的小部件,在对话框与用户的交互过程中,担任着主要角色.控件的种类很多,图7-00显示了对话框中的一些基本的控件.
BS_OWNERDRAW指定该按钮控件是一个自绘式按钮控件
BS_AUTOCHECKBOX同BS_CHECKBOX,不过单击鼠标时按钮会自动反转
BS_3STATE同BS_CHECKBOX,不过控件有三种状态:选择、未选和变灰
主要用来从一个预定义范围值中迅速而有效地选取一个整数值
CScrollBar
下面我们就将对这几种常用控件做出介绍。
1.静态正文控件
静态正文控件有时也称静态文本框,可用于显示文本(Text)、矩形(Rectangle)、图标(Icon)、光标(Cursor)、位图(Bitmap)以及元文件(Metafile)等。静态正文控件是一种单向交互的控件,只能支持应用程序的输出,而不能接受用户的输入。
ES_AUTOHSCROLL当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边
ES_AUTOVSCROLL当用户在最后一个可见行按回车键时,正文向上滚动一页
ES_CENTER在多行编辑框中使正文居中
ES_LEFT左对齐正文
ES_RIGHT右对齐正文
ES_LOWERCASE把用户输入的字母统统转换成小写字母
第二个参数rect是一个对RECT或CRect结构的引用,指定了编辑框的位置和尺寸。
第三个参数pParentWnd指定了父窗口,不能为NULL。
第四参数nID指定了编辑框的ID。
例如:CEdit* pEdit = new CEdit;
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(10, 10, 100, 100), this, 1);
CButton
组框(Group Box)
显示正文和方框,主要用来将相关的一些控件聚成一组
CButton
列表框(List Box)
显示一个列表,用户可以从该列表中选择一项或多项
CListBox
组合框(Combo Box)
是一个编辑框和一个列表框的组合.分为简易式、下拉式和下拉列表式
CComboBox
滚动条(Scroll Bar)
WS_GROUP指定该类控件作为一组
WS_TABSTOP使控件具有Tabstop属性
BS_CHECKBOX指定该按钮控件是一个复选框控件
BS_PUSHBUTTON指定该按钮控件是一个普通命令按钮控件
BS_RADIOBUTTON指定该控件是一个单选按钮控件,在圆按钮的右边显示正文
BS_GROUPBOX指定该按钮控件是一个组框控件
SS_BLACKRECT指定一个具有与窗口边界同色的实矩形(缺省为黑色)
SS_GRAYFRAME指定一个具有与屏幕背景同色的边框
SS_GRAYRECT指定一个具有与屏幕背景同色的实矩形
SS_LEFT左对齐正文,正文能回绕
SS_CENTER使显示的正文居中对齐,正文可以回绕
SS_LEFTNOWORDWRAP左对齐正文,正文不能回绕
第七章对话框和控件
Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,再把计算数据并且再将修改后的数据显示给用户的呢?这就是Windows应用程序中一个很重要的界面对象——对话框。对话框(Dialog)实际上是一个窗口.在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类.MFC用来创建对话框的类除了CDialog类外,还有CPropertySheet(属性单)和CPropertyPage(属性页),后两者是创建属性页和向导对话框的基础,本章就将对这几种对话框做出详细的介绍。
SetIcon:设置要在静态控件上显示的图标。
SetCursor:设置要在静态控件上显示的光标。
SetEnhMetaFile:设置要在静态控件上显示的元文件。
2.图片控件
图片控件也是一种静态控件,也是由CStatic类来管理。该控件提供一种方便的显示图形的方法,只要在其属性对话框上选择要显示的图形类型和要显示的图形就可以直接显示出来,而不需要编写任何代码。
第五个参数nID则说明了控件的ID。
例如:CStatic myStatic;
myStatic.Create(_T("my static"), WS_CHILD|WS_VISIBLE|SS_CENTER,
CRect(10,10,150,50),this);
CStatic类常用的成员函数:
SetBitmap :设置要在静态控件上显示的位图。
该函数如果创建成功,该函数返回TRUE,否则返回FALSE.
第一个参数lpszCaption指定了按钮显示的正文。
第二个参数dwStyle指定了按钮的风格。dwStyle可以是下列值的组合:
WS_CHILD指定该控件是一个子窗口
WS_VISIBLE指定该控件可显示
WS_DISABLED指定该控件不可显示
静态正文控件主要起说明和装饰作用。MFC的CStatic类封装了静态正文控件。CStatic类的成员函数Create负责创建静态正文控件,函数原形如下:
BOOL Create( LPCTSTRlpszText, DWORDdwStyle, const RECT&rect, CWnd*pParentWnd, UINTnID= 0xffff );
编辑框(Edit Box)
输入并编辑正文,支持单行和多行编辑
CEdit
命令按钮(Pushbutton)
响应用户的输入,触发相应的事件
CButton
复选框(Check Box)
用作选择标记,可以有选中、不选中和不确定三种状态
CButton
单选按钮(Radio Button)
相关文档
最新文档