




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 程序设计 实验实习指导 适用专业 计算机科学与技术 周云成 编写 计算机技术教研室 信息与电气工程学院 2012 年 5 月 面向对象程序设计实验指导 I 目 录 实验 一 C 集成开发环境使用 1 一 实验目的 1 二 实验设备与环境 1 三 实验内容与步骤 1 四 实验作业 5 实验 二 C 语言基础一 6 一 实验目的 6 二 知识要点 6 三 实验内容 7 四 实验作业 10 实验 三 C 语言基础二 12 一 实验目的 12 二 知识要点 12 三 实验内容 13 四 实验作业 17 实验 四 类的声明与定义 18 一 实验目的 18 二 知识要点 18 三 实验内容 19 四 实验作业 25 实验 五 类与函数 26 一 实验目的 26 面向对象程序设计实验指导 II 二 知识要点 26 三 实验内容 26 四 实验作业 33 实验 六 运算符重载 35 一 实验目的 35 二 知识要点 35 三 实验内容 36 四 实验作业 41 实验 七 继承与多态 43 一 实验目的 43 二 知识要点 43 三 实验内容 44 四 实验作业 50 实验 八 模板 52 一 实验目的 52 二 知识要点 52 三 实验内容 53 四 实验作业 55 实验 九 流操作 57 一 实验目的 57 二 知识要点 57 三 实验内容 58 四 实验作业 61 面向对象程序设计实验指导 1 实验 一 C 集成开发环境使用 一 实验目的 1 了解和使用 Visual C 6 0 集成开发环境 IDE 2 熟悉 Visual C 6 0 环境的基本命令和功能键 熟悉常用的功能菜单命令 3 学习完整的 C 程序开发过程 4 理解简单的 C 程序结构 5 学习使用 C 中数据的输入和输出方法 5 了解使用 Visual C 6 0 开发 Win32 Console Application 的过程 二 实验设备与环境 1 硬件配置 586 以上 PC 兼容机或品牌机 配有彩色显示器 鼠标 键盘 内存不小于 32MB 硬 盘可使用空间不少于 60MB 推荐配置为内存 64MB 或以上 硬盘自由空间 500MB 以上 2 软件配置 操作系统 Windows 98 Windows 2000 Windows Xp 及以上版本 集成开发环境 Microsoft Visual C 6 0 及以上版本 三 实验内容与步骤 本次实验将学习有关 Visual C 开发环境的一些知识 并尝试实现一个简单的控制台应 用程序 通过本次实验 了解 Visual C 的简单使用 C 应用程序的开发过程以及 C 程 序的结构 1 熟悉 Visual C 实验环境 1 启动 Visual C 6 0 点击 开始 菜单 选择 程序 选择 Microsoft Visual Studio 6 0 或 Microsoft Visual C 6 0 点击 Microsoft Visual C 6 0 启动开发环境 图 1 1 所示 2 看看初始化界面都有哪些部分组成 分别点击每个弹出菜单 看看都有哪些菜单 项 想一想它们应该具有哪些功能 面向对象程序设计实验指导 2 3 将鼠标分别置于工具栏上的每个按钮 系统会自动弹出按钮的命名含义 了解一 下都有哪些命令 想一想它们的含义和作用 4 在任意工具条上单击鼠标右键 弹出式菜单上将显示所有可用的工具条 选择其 中没有对号的项 看看有什么效果 再选择有对号的项 又有什么效果 5 将鼠标移动到任意工具条上 将鼠标放到图标间隙 按下鼠标左键不放 移动鼠 标到屏幕中间 有什么现象发生 再将它拖回到原来位置 有什么现象发生 6 将鼠标移动到左边的工作区窗口 按下鼠标左键不放 移动鼠标到屏幕中间 有 什么现象发生 再将它拖回到原来位置 有什么现象发生 7 将鼠标移动到下边的输出窗口 按鼠标右键 弹出一个菜单 选择其中的菜单项 隐藏 结果如何 要重新显示该窗口 选择菜单项 视图 输出 窗口是不是又显 示出来了 8 选择菜单向 文件 退出 X 退出 Visual C 6 0 开发环境 图 1 1 Visual C 集成开发环境 2 创建控制台应用程序 术语 控制台应用程序 是一个在命令行窗口中运行的基于字符的程序 这种程序运 行时 没有 Windows 窗口界面 用 Visual C 6 0 的应用程序编程向导 AppWizard 建立一个 Win32 Console Application 工程 然后将如下的源代码输入到工程 并检验运行结果 例例 1 11 1 求任意两个正整数的最小公倍数 求任意两个正整数的最小公倍数 include 面向对象程序设计实验指导 3 using namespace std int leaset common multiple int int void main void int a b cout a b cout leaset common multiple a b b a b for int i max i if i a 0 return i 按以下步骤创建应用程序 1 启动 Visual C 6 0 参见前文 2 选择 文件 菜单 新建 弹出新建新建对话框 如图 1 2 所示 图 1 2 新建工程对话框 3 在工程类型列表框中选择 Win32 Console Application 建立一个控制台应用程序 面向对象程序设计实验指导 4 类型的工程 在工程名称文本框中任意给工程起一个名字 如 Test1 然后为工程指定一个 方便查找的存储位置位置 点击确定 弹出一个新的对话框 使用默认选项 再次点击确定 则 建立一个新的控制台应用程序类型的空的工程 工程创建完成时 还找不到录入代码的地方 这是因为 Visual C 对应用程序开发的管理是通过工程来实现的 在一个工程中可以管理多 个文件 但对于空工程来说 代码源文件需要程序员自己来建立 4 选中 文件 菜单 新建 弹出新建对话框 选中文件类型列表框中的 C Source File 如图 1 3 所示 点选 添加到工程 复选框 在文件名文本框中输入新建 C 源文件的名字 如 1 cpp 点击确定 新文件就添加到了当前工程 如图 1 4 所示 图 1 3 新建文件对话框 面向对象程序设计实验指导 5 图 1 4 创建文件后的工程 5 在代码编辑窗口中录入例 1 1 所示的源代码 选择菜单 创建 执行 或在编译 微型条上点击 BuildExecute 按钮 或直接按快捷键 Ctrl F5 查看运行结果 6 现在将代码行 cin a b 后的分号删除 再次运行程序会提示错误 如图 1 5 所 示 图 1 5 错误提示 7 在鼠标在错误提示行上双击 光标将会跳转到错误行 查找到语法错误 修改后 可解决这一问题 8 选择 文件 菜单 保存 保存工作区 可将编辑后的源代码与工程保存到磁盘 上 9 当系统关闭后 第二次如想打开工程 可以找到工程所在的文件夹 双击扩展名 为 dsw 的文件 可重新打开工程 或启动系统后 选择 文件 打开工作区 找到存放工 程的位置 选中工程文件 打开工程 注意 特别值得注意的是 Visual C 工程可以管理多个源代码文件 但在这些文件中只能有 一个 main 函数 面向对象程序设计实验指导 6 四 实验作业 1 采用 Visual C 创建一个求解两个任意正整数最大公因数的控制台应用程序 在实验报告上写出程序的创建顺序及源代码 2 采用 Visual C 创建一个求解 ax2 bx c 0 方程实根的应用程序 其中 a b c 三个常数 项为任意双精度浮点数 在实验报告上写出程序的源代码 面向对象程序设计实验指导 7 实验 二 C 语言基础一 一 实验目的 1 进一步掌握 C 程序的结构 2 掌握并能熟练使用 C 中的两种注释方法 3 理解和掌握 C 中标识符的命名规则 4 了解和掌握 C 中的数据类型 特别是新增数据类型 bool 5 熟练使用 sizeof 运算符和 typedef 关键字 6 掌握引用数据类型的使用方法 7 理解和掌握 C 中数据的定义顺序与 C 有什么不同 二 知识要点 1 C 的源程序是由类和函数组成的 一个 C 程序中总是有若干个类和全局函数组 成 全局函数是不属于任何类的函数 类内既有数据成员也有成员函数 成员函数一般是用 来处理对象的数据成员的 2 C 在 C 语言的基础上增加了一种新的注释方法 单行注释 单行注释 只能注 释一行 从 符开始到一行末都会变成注释文本 注释文本最后不会被编译进目标代码 但 在程序中正确地使用注释 可以使程序具有更高的可读性 以及可理解性 是多行注 释 可以注释多行文本 3 C 中标识符的命名规则与 C 语言中相同 1 只能有数字 字母和下划线构成 2 首字符必须是下划线或字母 不能是数字 2 标识符中不能出现空格 4 为方便逻辑运算 C 中新增了一种新的基本数据类型 bool 型 布尔型 在内 存空间中占一个字节 取值范围为 true 和 false 5 sizeof 运算符可以取得任何数据类型及变量在内存空间中所占据存储空间的大小 typedef 关键字可以给数据类型起别名 它只是给某种数据类型增加了别名 并没有增加任 何新的数据类型 6 引用是变量的别名 它不会占据任何存储空间 它只是一个已经存在的变量的别名 引用具有隐含指针的作用 7 在 C 语言中变量必须在全局位置或在模块开始位置进行定义 在 C 中这种限制不 再存在 可以在需要用到某个变量时随时定义 但也要求变量在使用之前必须定义 甚至在 for 结构中也可定义变量 for int i 0 i 100 i 面向对象程序设计实验指导 8 三 实验内容 1 C 的程序结构及注释方法 例例 2 12 1 一个具有类 全局函数 注释行的一个具有类 全局函数 注释行的 C C 源程序源程序 include include include using namespace std define a class that represents a math expression a bln x the author is Zhou Yuncheng defined at Feb 25th 2006 class uln private double a double b public uln double m 0 double n 0 a m b n double getvalue double x unknown parameter return a b log x double max double a double b return a b a b void main void uln u 0 1 represant ln x uln v 10 3 represant 10 3ln x double c max u getvalue 3 v getvalue 3 cout c endl 练一练这个例子 看一看程序的运行结果 想一想程序的结构 学一学程序的注释方法 面向对象程序设计实验指导 9 2 bool 型数据的使用方法 例例 2 22 2 boolbool 型的用法型的用法 include using namespace std void main void bool a true b false cout a t b endl a 1 b 0 cout a t b endl a 100 b 100 cout a t b endl if a 从程序的运行结果想一想 bool 的取值范围问题以及与其他数据类型之间的转换问题 3 sizeof 的使用方法 例例 2 32 3 用用 sizeofsizeof 运算符查看各种数据类型和数据所占存储空间的大小运算符查看各种数据类型和数据所占存储空间的大小 include using namespace std void main void cout How much memory are mallocated to every data type endl cout bool t sizeof bool endl cout int t sizeof int endl cout long t sizeof long endl cout float t sizeof float endl cout double t sizeof double endl cout size of variable or array endl int a 100 面向对象程序设计实验指导 10 double b 2 0 0 cout var a t sizeof a endl cout array b t sizeof b endl 请改一改这个例子 尝试去获取各种指针数据类型所占据的存储空间的大小 4 typedef 的使用方法 例例 2 42 4 typedeftypedef 的使用方法的使用方法 include using namespace std typedef struct tagRect int left int top int right int bottom RECT LPRECT typedef unsigned long int ULONG PULONG void main void RECT a 0 0 100 100 LPRECT p ULONG b 100 PULONG pb 5 引用数据类型的使用 例例 2 52 5 引用作为函数的参数与返回值引用作为函数的参数与返回值 include using namespace std void swap int c a a b b c 面向对象程序设计实验指导 11 int for int i 1 i size i if a k a i k i return a k void main void int a 10 b 100 int int cout cout a t b endl swap a b cout a t b endl int m 1 2 3 4 5 3 9 2 16 34 98 cout find max m sizeof m sizeof int endl 想一想程序的运行结果说明了什么 这里需要注意的是 当函数的返回值类型为引用类 型时 作为函数返回值的数据必须是生存期超过该函数的全局数据 或从主调函数传递过来 的数据 四 实验作业 1 编写一个程序 输出基本数据类型 char short int long float double bool 和指针类型 void char short int long float double 的数据类型的长度 2 编写一个程序 程序中包含学生结构体用来存储学生信息 学号 姓名 年龄 专 业 定义数组 输入 5 个学生的信息 并按学生姓名在字母表中的顺序排序 然后输出 要求程序中用到 typedef 关键字 3 百钱买百鸡问题 公元 5 世纪末 中国古代数学家张丘建在 算经 中提出了如下问题 鸡翁一值钱五 鸡母一值钱三 鸡雏三值钱一 凡百钱买百鸡 问鸡翁 母 雏各几何 要求 输入任何一 个正整数代表钱数 然后输出这些钱能买的鸡的组合情况 面向对象程序设计实验指导 12 实验 三 C 语言基础二 一 实验目的 1 掌握 C 语言中的内存分配方法 2 熟练使用 malloc free 函数进行内存的分配与释放 3 熟练掌握和使用运算符 new delete 进行动态内存分配 4 理解内联函数 函数重载的概念 5 掌握函数的默认形参值的使用方法 6 掌握 const 关键字的使用方法 二 知识要点 1 C 语言继续支持使用 malloc 与 free 函数进行动态堆内存的分配与释放 这两个函 数的原形如下 void malloc size t 负责内存分配 参数为要分配的内存空间的大小 void free void 负责释放已分配的堆内存 参数为指向存储空间的指针 但为了方便内存的动态分配 C 语言提供了语言级别的支持 即增加了内存分配与释放的 运算符 new 和 delete 其中 new 用于分配内存空间 返回值为指向新分配存储空间的指针 delete 用于释放由 new 分配的存储空间 使用方法如下 data type p new data type 分配单元素存储空间 delete p 释放存储空间 data type p new data type integer value 分配动态一维数组 delete p 释放动态一维数组 分配一个动态二维数组 data type p const integer value new data type integer variable const integer value delete p 释放动态二维数组 注意 注意 当释放动态数组时 delete 后的 一定不能省略 2 内联函数是在函数的声明或定义时在前面加关键字 inline 的函数 内联函数的特性 是在调用处 进行代码展开 3 在 C 中可以允许一个标识符为多个函数命名 这些函数靠参数类型或个数的不同 互相区别开来 称之为函数重载 4 在 C 语言中可以采用 const 关键字来定义常量 const 用来修饰指针时 会使指针 具有不同的特性 如指向常量的指针 常指针和指向常量的常指针 5 在 C 中函数可以指定默认形参值 如 void func int 0 int 0 面向对象程序设计实验指导 13 三 实验内容 1 动态内存分配 例例 3 13 1 使用使用 mallocmalloc 和和 freefree 进行内存的分配与释放进行内存的分配与释放 include include void main void int size int array1 printf How many items scanf d array1 int malloc size sizeof int 分配一维数组 for int i 0 i size i array1 i i 1 for i 0 i size i printf 5d array1 i free array1 printf n int rows int array2 5 printf How many rows scanf d array2 int 5 malloc rows 5 sizeof int 分配二维数组 for i 0 i rows i for int j 0 j 5 j array2 i j i j for i 0 i rows i for int j 0 j 5 j printf 5d array2 i j printf n free array2 仔细阅读该程序 想一想这个程序是如何实现一维数组与行可变的二维数组的动态分配 的 并用 new 和 delete 重新实现该程序 面向对象程序设计实验指导 14 例例 3 23 2 存取人一个学生信息的程序存取人一个学生信息的程序 include using namespace std typedef struct student char sno 10 char sname 20 unsigned int age char special 30 STUDENT PSTUDENT void main void int count cout count PSTUDENT stu new STUDENT count for int i 0 i stu i sno stu i sname stu i age stu i special for i 0 i count i cout stu i sno t stu i sname t stu i age t stu i special endl delete stu 2 函数重载 例例 3 33 3 重载加重载加 sumsum 函数函数 include using namespace std struct complex double real double img friend ostream ostream else if var img 0 out var img istream return in int sum int int complex sum complex complex sum complex complex void main int a 10 b 5 cout sum a b c cin d cout sum c d endl cout sum c img a img b img return c 注意 对于函数重载 重载函数只能靠函数参数的类型或个数不同来互相区别 采用实 参最佳匹配形参的方法进行调用 函数的返回值不能用来区别函数重载中的不同函数 3 函数默认形参值 例例 3 4 调用带默认形参值的函数调用带默认形参值的函数 include using namespace std void show int int 2 int 3 void main void show 1 show 1 4 show 1 4 5 void show int 10 int 20 int 30 show show 50 void show int a int b int c cout a t b t c endl 4 const 关键字 例例 3 53 5 常量与指针常量与指针 include using namespace std const int ca 100 const cb 200 面向对象程序设计实验指导 17 const double pi 3 14 void main const char p p student p 0 c will cause error char const p1 hello world p1 NULL will cause error const char const p2 good 四 实验作业 1 编写 vmalloc 和 vfree 函数 使用 new 和 delete 使得这两个函数分别能够分配和释 放任意行数和列数的动态整型二维数组 vmalloc 和 vfree 函数的原型如下 int vmalloc int int void vfree int 2 编写程序 处理学生的成绩信息 学生数和科目数未定 留在程序运行时动态指定 计算每个学生的平均成绩 并按照平均成绩从大到小进行排序 3 通过函数重载 编写一个程序 使得程序能够求出 int double 型数组中最大数和最 小数的差值 4 编写一个程序 在程序中 main 函数向 function 函数传递了一个字符串参数 function 函数返回字符串中字符 a 的个数 并且不允许 function 函数修改字符串参数 面向对象程序设计实验指导 18 实验 四 类的声明与定义 一 实验目的 1 掌握类的声明与定义方法 2 了解 class 与 struct 关键字在定义类上的区别 3 理解和掌握类的构造函数与析构函数的概念 以及构造函数与析构函数的调用时机 4 理解和掌握缺省构造函数 带参构造函数 拷贝构造函数以及转换构造函数的定义 使用方法 并了解各种构造函数的调用场合 5 理解和掌握构造初始化表的使用 6 理解和掌握函数重载方法和带默认形参值的构造函数 二 知识要点 1 类的声明是指声明类的原型 即说明类所具有的数据成员与成员函数 语法格式如 下 class class name private private member lists public public member lists 类的成员函数既可以在类内定义 也可以在类外定义 在类内定义的成员函数默认为内联 inline 函数 在类外定义的成员函数默认为非内联函数 可以通过在声明成员函数时使 用关键字 inline 将其变成内联函数 2 class 与 struct 都能用来声明类 但二者是有区别的 class 的成员默认访问属性为 private struct 的成员默认为公有 3 类的构造函数是类的特殊成员函数 它与类的名字相同 不指明返回值类型 当用 类来定义对象时被默认调用 在一个类中 可以不定义任何构造函数 此时编译器会为类提 供一个缺省构造函数 即不带有任何参数的构造函数 一旦类定义了任何形式的构造函数 编译器便不会再提供缺省构造函数 当采用其它对象为对象初始化时 会调用类的拷贝构造 函数 当用其它数据类型对象为对象初始化时 必须为类定义转换构造函数 析构函数也是 类的成员函数 不能重载析构函数 因为析构函数不具有任何参数 在对象销毁时被自动调 面向对象程序设计实验指导 19 用 class class name public class name 缺省构造函数 class name int x int y 带参数的构造函数 class name const class name 拷贝构造函数 class name char str 转换构造函数 class name 析构函数 三 实验内容 1 类的声明与定义 例例 4 14 1 定义一个学生类定义一个学生类 include include using namespace std class student private char sNo 10 char sName 20 char sMajor 20 public void set information char xno char xname char xmajor strcpy sNo xno strcpy sName xname strcpy sMajor xmajor void print information cout Number sNo endl cout Name sName endl cout Majoring sMajor endl 面向对象程序设计实验指导 20 void main void student a a set information 2002187 Zhang San Computer a print information 例例 4 24 2 定义一个矩形框类定义一个矩形框类 include using namespace std class rectangle private int top left int bottom right public void setRect int t 0 int l 0 int b 0 int r 0 top t left l bottom b right r int getWidth return right left 1 int getHeight return bottom top 1 void main rectangle a a setRect 0 0 100 50 cout a getWidth t a getHeight endl 面向对象程序设计实验指导 21 2 缺省构造函数与带参构造函数 例例 4 34 3 定义一个能够进行数据成员初始化的日期类定义一个能够进行数据成员初始化的日期类 include using namespace std typedef unsigned int UINT class date private int year UINT month day public date year 1900 month 1 day 1 cout default constructor endl date int y UINT m UINT d year y month m day d cout constructor with parameters endl void print cout year month day endl void main void date a b 2007 5 26 a print b print 从程序的运行结果 你能总结出什么规律来 类的构造函数的调用规律是什么样的 请 注意构造函数的构造初始化列表的使用方法 3 拷贝构造函数 例例 4 44 4 一个具有拷贝构造函数的时间类一个具有拷贝构造函数的时间类 include using namespace std class Time private 面向对象程序设计实验指导 22 int hour minute second public Time int h 0 int m 0 int s 0 hour h minute m second s cout constructor with default value parameters endl Time const time void print cout hour minute second endl void main Time a 12 a print Time b a b print 从程序的运行结果可以看出 当使用另一个对象为当前对象初始化时 会调用拷贝构造 函数 例例 4 54 5 一个必须具有拷贝构造函数的字符串类一个必须具有拷贝构造函数的字符串类 include include using namespace std class string public string char NULL string const string string public void set string const char void print private char str 面向对象程序设计实验指导 23 string string char str str str if str str new char strlen str 1 strcpy str str cout Constructor with default parameter endl string string const string strcpy str other str cout Copy constructor endl string string delete str void string set string const char str delete str if str str NULL else str new char strlen str 1 strcpy str str void string print 面向对象程序设计实验指导 24 cout str endl void main void string a student 调用转换构造函数 string b a 调用拷贝构造函数 a print b print a set string good student a print b print 在这个类中 必须定义拷贝构造函数 想一想为什么 4 转换构造函数 例例 4 64 6 一个具有转换构造函数的类一个具有转换构造函数的类 include using namespace std class complex private double real img public complex real 0 img 0 complex double r real r img 0 complex double r double i real r img i void print cout real t img endl void main complex a b 3 complex c 2 3 a print b print 面向对象程序设计实验指导 25 c print 四 实验作业 1 定义一个具有各种构造函数的椭圆类 ellipse 并向外输出面积 area 2 定义一个具有构造函数的学生类 3 定义一个具有构造函数与析构函数的字符串类 string 4 定义一个具有转换构造函数的 item 类 能够实现 int 到 item 的转换 面向对象程序设计实验指导 26 实验 五 类与函数 一 实验目的 1 进一步学习掌握类的定义和使用方法 2 了解 this 指针的概念和 this 指针的使用方法 3 掌握 static 数据成员和 static 成员函数的定义和使用方法 4 理解和掌握 const 数据成员和 const 成员函数 5 学习和掌握友元函数和友元类的使用方法 二 知识要点 1 类对象可以作为函数的参数和返回值 也可以作为其它类的数据成员 当对象作为 类的数据成员时 成员对象比类对象要较早的构造出来 即先调用成员对象的构造函数 2 this 指针是指向当前类对象的隐含指针 无需定义即可直接使用 this 指针是在通过 对象调用其成员函数时隐含传递给成员函数的 其原理解释代码如下 void string print 隐含为 void string print string this string a a print 隐含为 string print 3 静态数据成员是类级别的数据 是被类的所有实例对象所共享的 即不属于某个具 体的对象 因此静态数据成员具有静态生存期 即使不定义任何对象静态数据成员也是存在 的 它是只供指定类使用的静态生存期变量 静态成员函数也具有类似特性 4 常量数据成员必须在构造初始化表中进行初始化 常成员函数即可以被一般对象调 用能够 也允许常量对象调用 5 当一个类允许非成员函数访问其私有成员时 必须将该函数声明为类的友元函数 同样 当一个类允许其它类访问其私有成员时 也必须将另外一个类声明为其友元类 三 实验内容 1 类对象作为函数参数和返回值 例例 5 15 1 求两个点之间的直线距离求两个点之间的直线距离 include include 面向对象程序设计实验指导 27 using namespace std class point private double x y public point double x 0 double y 0 x x y y cout constructor with parameters endl point const point friend double len point point friend double len const point double len point a point b return sqrt pow a x b x 2 pow a y b y 2 double len const point void main void point a 0 0 b 3 4 cout len a b endl 运行该程序 检查运行结果 想一想结果说明了什么问题 将传值调用的重载注释掉 重新运行程序 看看运行结构 两种情况对照 说明什么问题 2 类对象作为类成员 例例 5 25 2 pointpoint 对象与对象与 sizesize 对象作为对象作为 rectanglerectangle 类成员类成员 include using namespace std class point 面向对象程序设计实验指导 28 private int x y public point int x 0 int y 0 x x y y cout Point Constructor with default parameter endl point const point point cout Point Destructor endl void print cout Point x y endl class size private int width height public size int w 0 int h 0 width w height h cout Size Constructor with default parameter endl size const size size cout Size Destructor endl void print 面向对象程序设计实验指导 29 cout Size width height endl class rectangle private point p size s public rectangle cout Rectangle Default Constructor endl rectangle int x int y int w int h p x y s w h cout Rectangle Constructor with simple parameters endl rectangle const point rectangle const rectangle rectangle cout Rectangle Destructor endl void print p print s print 面向对象程序设计实验指导 30 void main void rectangle a a print rectangle b 0 0 100 50 b print point p 10 10 size s 50 100 rectangle c p s c print rectangle d c d print 3 静态数据成员和静态成员函数 例例 5 35 3 统计兵员的战损情况统计兵员的战损情况 include include include include using namespace std class solder private int state public static int count public solder state 100 void hit if state 0 state if state 0 count 面向对象程序设计实验指导 31 int solder count 100 void main void srand time NULL solder army new solder solder count for int i 1 i 20000 i int c rand 200 1 if c 100 army c 1 hit cout solder count endl delete army 改动本程序 检验类的大小与你所看到的大小一样吗 为什么 如果将静态成员改成私 有的话 程序又该如何修改呢 4 常量数据成员和常成员函数 例例 5 45 4 一个具有常量数据成员和常成员函数的一个具有常量数据成员和常成员函数的 bookbook 类类 include include using namespace std typedef const char LPCSTR class book private LPCSTR name LPCSTR author const unsigned int pages float price public book name Unknown author NoName pages 0 price 0 book LPCSTR nm LPCSTR at unsigned int pg float pr name nm author at pages pg price pr public void print const cout name t author t pages t price endl 面向对象程序设计实验指导 32 void main book a b Computer Technology Prinsly 500 98 5 a print b print const book c c print 修改该程序 将 pages 成员的初始化放到构造函数体中 重新运行程序会怎样 为什么 现在将常成员函数后的 const 关键字注释掉 重新编译程序会怎样 为什么 5 友元函数与友元类 例 5 5 列出 person 类的私有信息 include using namespace std typedef const char LPCSTR typedef char LPSTR typedef unsigned int UINT class person private LPCSTR pid LPSTR name UINT age public person LPCSTR pid 0 LPSTR name Unknown UINT age 1 pid pid name name age age friend void list const person UINT void list const person pp UINT count for UINT i 0 i count i cout pp i pid t pp i name t pp i age endl 面向对象程序设计实验指导 33 void main person a 10 list a 10 四 实验作业 1 采用静态数据成员和静态成员函数定义一个能够实现对象创建个数跟踪的 person 类 2 定义一个复数类 complex 定义一个能够实现两个复数对象相加的全局函数 sum 复 数类中的数据成员为私有 3 已知点 x y 到直线 ax by c 0 的距离的计算公式为 d ax by c sqrt a2 b2 分 别定义一个 point 类和 line 类 利用全局函数 dist 计算一个点到一条直线的距离 4 在计算机上练习下面的程序 写出运行结果 include using namespace std class time public time int hour 24 int minute 0 int second 0 hour hour minute minute second second time const time void print const cout CONST hour minute second 这几种运算符必须以成员函数的形式 重载 如果运算符左侧的操作数不是类对象时 则必须以友元函数的形式重载运算符函数 4 运算符重载的注意事项 1 不可以重载非 C 的运算符 2 运算符重载可以采用成员函数方式或友元方式 3 被重载的运算符必须保持预定义的的优先级与结合性 4 应尽量使重载的运算符语义自然 好理解 5 注意各运算符之间的联系 面向对象程序设计实验指导 36 6 运算符重载不具有组合性 5 转换运算符函数可以把一种类的对象转换为其它类型的对象或向内部类型转换 这 种运算符函数必须重载为非静态成员函数 而不能是友元函数 其定义形式如下 X operator T 定义了从 X 到 T 的转换 三 实验内容 1 运算符函数 例例 6 16 1 复数的复数的 运算运算 include using namespace std class complex private double real img public complex double r 0 double i 0 real r img i complex operator complex complex operator complex void pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 联名品牌合同(标准版)
- 青钢补偿合同(标准版)
- 借款购销合同(标准版)
- 安全用电培训教育心得课件
- 2025年合成材料阻燃剂项目申请报告
- 2025年高氯酸项目提案报告范文
- 安全用气培训助手课件
- 2025年度中国铁路上海局集团有限公司招聘普通高校毕业生310人四(高等职业院校)模拟试卷及答案详解一套
- 法律进企业讲座课件
- 新能源行业品牌建设与市场推广新趋势2025年分析报告
- GB/T 14193.1-2025液化气体气瓶充装规定第1部分:工业气瓶
- 保安安检培训课件
- 2025年肝素行业研究报告及未来行业发展趋势预测
- 2025年脚手架租赁合同3篇
- 医院工作纪律培训课件
- 营房装修施工方案(3篇)
- 品牌基础知识培训内容课件
- 2025年知识竞赛-监理知识竞赛历年参考题库含答案解析(5套典型题)
- DG-TJ08-2120-2025 集体土地所有权调查技术标准
- 脑梗死健康宣教及指导
- 遵守安全生产法 当好第一责任人
评论
0/150
提交评论