资源描述
杜红燕 编
《C++程序设计》
课程试验指导书
长 沙 学 院 计 算 机 科 学 和 技 术 系
前 言
本书是《C++程序设计》课程试验指导书。初学程序设计人,全部有一个体会,看程序轻易,但自己动手写程序难,甚至感觉无从下手,究其原因就在于没有把握住学习程序设计根本方法,学习程序设计关键是多实践,经过上机体会和掌握程序设计思想和方法,经过上机验证程序正确性,为此我们编写了这本试验指导书。
本书关键内容分为三个部分,第一部分为试验内容,对每个试验试验目标、试验类型、试验课时、试验原理及知识点、试验环境(硬件环境、软件环境)和试验内容及步骤进行简单介绍,第二部分为试验指导,对每个试验试验方法,试验步骤及补充试验知识进行具体介绍,第三部分为试验汇报。
C++程序设计环境有很多,在这里我们选择是MicroSoft Visual C++ 6.0。对书中每个试验题目,在试验指导部分全部给出了编程提醒,部分试验给出了程序参考代码,最终还介绍了常见标准库函数函数原型。
需要强调一点,程序设计是一个创作过程,处理一个问题方法不是唯一,所以请大家在阅读本书试验指导之前,已经独立思索过对这些问题处理方法,这么才有利于程序设计水平提升。
编者
2 月
目 录
第一部分 试验内容
试验1:类定义和结构……………………………………………………………………2
试验2:堆和拷贝结构函数、静态组员和友元、运算符重载……………………………4
试验3:经过继承进行软件渐增式开发…………………………………………………8
试验4:I/O流和文件操作………………………………………………………………….11
试验5:模板和异常处理……………………………………………………………………13
第二部分 试验指导
Visual C++ 6.0集成环境………………………………………………………………….16
试验1:类定义和结构……………………………………………………………………26
试验2:堆和拷贝结构函数、静态组员和友元、运算符重载……………………………31
试验3:经过继承进行软件渐增式开发…………………………………………………34
试验4:I/O流和文件操作…………………………………………………………………..39
试验5:模板和异常处理…………………………………………………………………… 43
C/C++常见标准库函数……………………………………………………………………… 46
第一部分
试验内容
试验1:类定义和结构
一、试验目标
1、掌握类定义和使用
2、学习结构类方法
3、掌握怎样定义结构函数和析构函数
4、掌握初始化对象方法
5、了解面向对象程序设计思想
二、试验类型 验证
三、试验课时 4课时
四、试验原理及知识点
1、类定义
2、类组员访问控制
3、类数据组员和组员函数
4、结构函数和析构函数
5、对象定义和初始化
五、试验环境(硬件环境、软件环境)
1、软件:Windows 操作系统,Visual C++ 6.0
2、硬件:CPU 飞跃Ⅲ;内存64兆以上(最好128兆以上);
六、试验内容及步骤
1、定义一个描述学生通讯录类,数据组员包含:姓名、学校、电话号码和邮编;组员函数包含:输出各个数据组员值,分别设置和获取各个数据组员值。
2、将第一个上机试验题中组员函数Init改为结构函数,将组员函数FreeSpace改为析构函数。增加一个缺省结构函数,使指针pName,pSchool和pNum初值为0,使Box包含空字符串。
3、定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形式表示,即24/36应该以2/3形式表示,并提供public组员函数实现以下功效:
(1) 两个分数相加,结果表示为简化形式;
(2) 两个分数相减,结果表示为简化形式;
(3) 按a/b形式输出分数值,a、b为整数;
(4) 按浮点数形式输出分数值。
七、思索和练习
1、编写Time类,要求:
(1) 包含年、月、日、时、分、秒信息;
(2) 结构函数将类对象初始化为系统目前时间(使用头文件time.h中time()函数);
(3) 能按标准格式输出对象表示时间。
2、编写矩形类,要求能够提醒用户输入矩形长度和宽度,并显示该矩形长度、宽度和面积。
试验2:堆和拷贝结构函数、静态组员和友元、运算符重载
一、试验目标
1、领会拷贝结构函数实质
2、学会使用堆对象分配和释放
3、领会运算符重载意义
4、学会使用this指针
5、了解友元语法和含义
6、在此基础上领会和掌握面向对象程序设计思想。
二、试验类型 验证
三、试验课时 4课时
四、试验原理及知识点
1、堆对象分配和释放
2、拷贝结构函数
3、类复合
4、This指针
5、静态数据、友元函数和友元类
6、运算符重载概念
7、单目运算符重载
8、双目运算符重载
9、重载流插入和流提取运算符
10、赋值运算符重载
五、试验环境(硬件环境、软件环境)
1、软件:Windows操作系统,Visual C++ 6.0
2、硬件:CPU 飞跃Ⅲ;内存64兆以上(最好128兆以上);
六、试验内容及步骤
1、建立一个Stock类,含有股票代码和股票现价两个数据组员。用new自动为Stock类对象分配内存,并将股票”600001”,现价8.89存入内存对应域中。在类中增加静态数据组员记载创建对象个数,增加拷贝结构函数并调用。
2、对以下圆柱类Column定义:
class Column {
public:
Column(double x, double y, double r, double h);
~Column();
double area(); //求圆柱面积
double volume(); //求圆柱体积
private:
double height; //高度
double radius; //半径
double x; //底面圆心x坐标
double y; //底面圆心y坐标
};
要求:
(1) 实现类Column中四个组员函数;
(2) 增加一个友元函数,实现从键盘读取四个double类型数据对类Column对象进行赋值功效;
(3) 增加一个友元函数,实现将类Column对象输出到屏幕功效,输出信息包含对象基础信息和对象面积和体积。
3、对于下面定义类Test:
class Test {
private:
int a;
double b;
};
要求:
(1) 为类Test每个数据组员增加一个set函数,并使这些set函数全部能够被连续调用;
(2) 为类Test每个数据组员增加一个get函数。
(3) 假如要求全部get函数全部能够被连续调用,这些函数该怎样编写?
4、 定义一个复数类,经过重载运算符: *,/,直接实现二个复数之间乘除运算。编写一个完整程序,测试重载运算符正确性。要求乘法“*”用友元函数实现重载,除法“/”用组员函数实现重载。
七、思索和练习
1、定义一个复数类,经过重载运算符: *,/,直接实现二个复数之间乘除运算。编写一个完整程序,测试重载运算符正确性。要求乘法“*”用友元函数实现重载,除法“/”用组员函数实现重载。
2、定义包含年、月、日信息日期类Date,并重载二元运算符“+”,使之含有日期对象和整数(天数)相加功效,并编程测试。
3、下列程序定义了一实部为real,虚部为imag复数类complex,要求重载运算符“+”、“-”、“*”实现复数对象加法、减法、乘法运算,并编写测试程序。假如要进行a = b + c * d;(a、b、c、d全部是类Complex对象)这么运算,需要重载赋值运算符吗?为何?
class Complex{
public:
complex(double r=0, double i=0)
{
real=r;
imag=i;
}
private:
double real, imag;
};
4、于下面类MyString,要求重载部分运算符后能够计算表示式:a = b + c;,其中a、b、c全部是类MyString对象。请重载对应运算符并编写程序测试。
class MyString {
public:
MyString(char *s) {
str = new char[strlen(s)+1];
strcpy(str, s);
}
~MyString() {
delete []str;
}
private:
char *str;
};
5、对于下面Time类:
class Time {
public:
Time(int h = 0, int m = 0, int s = 0);
private:
int hour, minute, second;
};
要求:
(1) 实现结构函数,是类Time数据组员能够得到正确赋值;
(2) 重载流插入运算符<<,根据hh:mm:ss格式输出类Time对象;
(3) 重载流提取运算符>>,根据hh-mm-ss格式输入类Time对象。
试验3:经过继承进行软件渐增式开发
一、试验目标
1、掌握继承方法,了解多态性
2、掌握虚函数使用方法,观察其多态性
3、掌握软件渐增式开发方法
二、试验类型 设计
三、试验课时 6课时
四、试验原理及知识点
1、继承和派生基础概念
2、继承定义
3、基类和派生类对象转换
4、类指针使用
5、多态性意义和作用
6、虚函数定义方法
7、抽象基类作用和定义方法
8、虚析构函数作用和使用方法
9、怎样在程序中实现多态性
10、软件渐增式开发方法
五、试验环境(硬件环境、软件环境)
1、软件:Windows操作系统,Visual C++ 6.0
2、硬件:CPU 飞跃Ⅲ;内存64兆以上(最好128兆以上);
六、试验内容及步骤
1、下面是一个形状类Shape,编写类Shape派生类:圆类Circle、三角形类Triangle和矩形类Rectangle,并重定义基类组员函数使之返回正确结果(show函数要输出对象基础信息),然后编写程序测试它们。
class Shape {
public:
//形状面积
double area() {
return 0;
}
//形状周长
double girth() {
return 0;
}
//输出对象信息
void show() {
cout<<"Shape Object: "<<endl;
}
private:
};
2、申明一个基类Currency,其中含有protected类型数据组员Japan和Europe,分别代表日元、欧元对美元汇率。组员函数set()用来设置两个数据组员初始值,定义print_exchang()为纯虚函数。申明类Ja和Eur分别为Currency派生类,其组员函数print_exchange()分别用来计算10000日元和100欧元兑换多少美元。根据通例,汇率表示方法是:1美元兑换日元116.30,1欧元兑换美元1.1634(116.30和1.1634要在set()中存入Japan和Europe中)。
3、给定以下抽象类:
class shape{
protected:
double r;
public:
shape(double x){r=x;}
virtual void area()=0;
virtual void perimeter()=0;
};
(1) 以shape类为基类,派生一个circle圆形类、一个in_square圆内接正方形类、一个ex_square圆外接正方形类,在派生类中对shape类中求面积和周长纯虚函数进行重载。
(2) 对类进行实例化,输出运算结果
4、给定单向链表类List,要求以List类为基类建立两种类型表:队列(优异先出)和堆栈(优异后出),请编写程序实现队列和堆栈存放和读取操作,编写一个测试程序,演示类功效。
class List{
public:
List()
{
head=NULL;
tail=NULL;
next=NULL;
}
virtual void store(int i)=0;//存放数据
virtual int retrieve()=0;//读取数据
List *next;//指向表下一项
int num;//用于存放节点数据
protected:
List *head;//指向表头
List *tail;//指向表尾
};
六、思索和练习
1、编写一个学生和老师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,老师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和老师类数据操作类teacher基类。
2、编写一个程序计算出球、圆柱和圆锥表面积和体积。
要求:
(1) 定义一个基类圆,最少含有一个数据组员半径;
(2) 定义基类派生类球、圆柱、圆锥,全部含有求表面积和体积组员函数和输出函数。
(3) 定义主函数,求球、圆柱、圆锥和体积。
试验4: I/O流和文件操作
一、试验目标
1、掌握文件和流概念
2、学会使用FILE结构和使用文件流进行文件打开、建立、读、写和关闭操作
二、试验类型 验证
三、试验课时 2课时
四、试验原理及知识点
1、文件和流概念
2、使用FILE结构操作文件
3、使用文件流操作文件
五、试验环境(硬件环境、软件环境)
1、软件:Windows 操作系统,Visual C++ 6.0
2、硬件:CPU 飞跃Ⅲ;内存64兆以上(最好128兆以上);
六、试验内容及步骤
1、假设有一个文件“one.dat”已经存在,编写程序创建文件“two.txt”,并将文件“one.dat”中内容复制到文件“two.txt”中。
2、下面是一个三角形类Triangle定义:
class Triangle {
public:
Triangle(double a, double b, double c) {
x = a;
y = b;
z = c;
}
int saveToFile(ostream &outFile);
int loadFromFile(istream *inFile);
private:
double x, y, z;
};
(1) 实现组员函数saveToFile,将对象本身保留到文件中;
(2) 实现组员函数loadFromFile,从文件中恢复对象;
(3) 编写程序使用类Triangle,并实现以下功效:
(1) 将类Triangle多个对象保留到一个指定文件中;
(2) 能一次从指定文件中恢复多个对象。
七、思索和练习
1、输入三角形三边a,b,c,计算三角形面积公式:
Area=sqrt(s*(s-a)*(s-b)*(s-c)),其中s=(a+b+c)/2
形成三角形条件是:a>b+c,b>a+c,c>a+b;
编写程序,输入a,b,c,检验a,b,c是否满足以上条件,如不满足,由cerr输出相关犯错信息。
2、建立两个磁盘文件f1.dat和f2.dat,编写程序实现以下工作:
(1) 从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件放10个);
(2) 从f1.dat读入10个数,然后存放到f2.dat文件原有数据后面;
(3) 从f2.dat中读入20个整数,将它们按从小到大次序存放到f2.dat(不保留原来数据)。
3、设计一个管理图书目标简单程序,提供基础功效包含:可连续将新书存入文件“book.dat”中,新书信息加入到文件尾部;也能够依据输入书名进行查找;把文件“book.dat”中同书名全部书显示出来。为简单起见,描述一本书信息包含:书号,书名,出版社和作者。
试验5: 模板和异常处理
一、试验目标
了解模板概念、定义,了解C++异常处理机制。
二、试验类型 验证
三、试验课时 4课时
四、试验原理及知识点
1、异常基础概念
2、异常触发、传输和处理
3、类属程序设计
4、模板定义和使用
五、试验环境(硬件环境、软件环境)
1、软件:Windows操作系统,Visual C++ 6.0
2、硬件:CPU 飞跃Ⅲ;内存64兆以上(最好128兆以上);
六、试验内容及步骤
1、编写一个程序,使用new运算符动态分配空间,当空间分配失败时抛出异常,并捕捉处理该异常,处理异常时要考虑不能有内存泄漏。
2、写一个函数模板,求数组中最大元素。使得函数调用时,数组类型和返回值类型能够是整数也能够是双精度类型。
3、以下是一个整数栈类定义:
const int SIZE=100;
class Stack
{
public:
Stack();
~ Stack();
void Push(int n);
int Pop();
private:
int stack[SIZE];
int tos;
};
(1) 编写一个栈类模板(包含其组员函数定义),方便为任何类型对象提供栈数据结构操作
(2) 在应用程序中创建整数栈、字符栈和浮点数栈,并提供部分数据供进栈、退栈和打印操作
七、思索和练习
求一元二次方程式ax2+bx+c=0实根,假如方程没有实根,则利用异常处理机制输出相关警告信息。
第二部分
试验指导
Visual C++ 6.0集成环境
一、VC++6.0关键菜单、工具
可视化和面向对象编程技术是当今世界流行编程技术,在众多开发工具中,Microsoft企业VC++6.0独树一帜,深得广大程序员青睐。VC++6.0提供了编写应用程序全部工具,它包含了很多单独组件,并由窗口、对话框、菜单、工具栏等组成了一个统一整体。
首先,看一下开启主界面:
1. VC++6.0菜单
Visual C++ 6.0菜单栏图所表示,其中包含File,Edit,View等共九个菜单选择项,经过它们,你能够轻松地完成编辑程序和资源、编译、链接及调试程序等各项工作。
要激活菜单栏中菜单有两种方法:
一是用鼠标左键直接单击对应菜单,另一个方法是在按住Alt键同时,按下对应菜单热键,比如要激活Edit菜单只要按下Alt+E键即可。下图 是Visual C++ 6.0主菜单,当激活某个菜单后,会弹出对应下拉子菜单。其中包含了多个菜单项,用于实施对应功效或命令
有部分常见菜单命令含有快捷键,比如File菜单中New菜单命令,它快捷键是Ctrl+N,只要直接按下此快捷键就能够实施对应菜单命令。有菜单项显示为灰色,表示这些菜单命令在此时为禁用状态。
以下介绍多个常见菜单,这些在以后编程中会常常使用。
1、 File文件菜单
File菜单图所表示,其中包含了多种对文件进行操作选项,如加载、保留、打印和退出等。各菜单项功效分述以下:
New菜单项(Ctrl+N)此菜单项快捷键是Ctrl+N。用于创建新文件、工程、工作区或其它文档。当您选中此菜单项后,屏幕将会出现New对话框,图所表示。
其中包含了4个选项卡:File、Project、Workspace和Other Documents。在File选项卡中,您能够选择创建多种文件,当选中Add to project复选框时,则新创建文件将加入到目前工程中。
表1-1 New对话框中可创建项目类型工程
选项 说 明
ATL COM AppWizard 创建ATL应用程序
Cluster Resource Type Wizard 创建多重资源类型
Custom AppWizard 创建自定义AppWizard
Database Project 创建数据库项目
DevStudio Add-in Wizard 创建自动化宏
Extended Stored Proc Wizard 创建扩展存放过程
ISAPI Extension Wizard 创建Internet服务器或过滤器
Makefile 创建Make文件
MFC ActiveX ControlWizard 创建ActiveX控件程序
MFC AppWizard [dll] 创建MFC动态链接库
MFC AppWizard [exe] 创建MFC可实施程序
Utility Project 创建实用工具项目
Win32 Application 创建Win32应用程序
Win32 Console Application 创建Win32控制台应用程序 此项即为控制台程序项目
Win32 Dynamic-Link Application 创建Win32动态链接库
Win32 Static Library 创建Win32静态库
在新建立程序时,首先要建立工程项目文件,依据程序类型选择工程。上表说明了多种工程项目标说明。
File选项卡中能够创建文件类型见表1-2
New对话框中可创建文件类型
文件选项 说 明
ActiveX Server Page 创建活动服务器页
Binary File 创建二进制文件
Bitmap File 创建位图文件
C/C++ Header File 创建C/C++头文件
C++ Source File 创建C++源文件
Cursor File 创建光标文件
HTML Page 创建HTML文件
Icon File 创建图标文件
2、编辑菜单
Edit菜单中命令是用来使用户便捷地编辑文件内容,如进行删除、复制等操作,其中大多数命令功效和windows中标准字处理程序编辑命令一致。
3、VIEW菜单:
view菜单中命令关键用来改变窗口和工具栏显示方法,激活调试时所用各个窗口等。
4、插入菜单
Insert菜单中命令关键用于项目
及资源创建和添加。
5、Project菜单
Project菜单中命令关键用于项目
操作,如项目中添加源文件等。
6、Build菜单
Build菜单中命令关键用来应用
程序编译、连接、调试、运行。
7、工具菜单Tools菜单中命令关键用于选择
或制订开发环境中部分实用工具。
8、窗口菜单
Windows菜单中命令关键用于文档窗口操作。如排列文档、打开或关闭一个文档窗口、重组或切分文档窗口等。
9、帮助菜单
Visual C++6.0 同大多数其它Windows 应用软件一样,提供了大量具体帮助信息,而Help菜单便是得到这些帮助信息最有效和最关键路径。
2. VC++6.0标准工具栏
标准工具栏中工具按钮命令大多数是常见文档编辑命令,如新建、保留、撤消、恢复、查找等。
小型编连工具栏
小型编连工具栏提供了常见编译、连接操作命令。
二、用VC++6.0开发控制台程序
1.开启VC++6.0,选择“文件”菜单下“新建”命令。弹出下列对话框。
2.选择Win32 Console Application项目,给项目起个名称如hello,并设置存放路径,点击确定后到以下图示:
3.选择一个空项目,点击确定。
4.再点击新建菜单项:
在弹出对话框中,选择文件选项,并选择C++ Source File,为文件起名并设置好文件路径:
5.这时,在打开代码编辑窗口里输入代码。
6.点击编译按钮和Build按钮并运行得到结果以下:
试验1:类定义和结构
1、定义一个描述学生通讯录类,数据组员包含:姓名、学校、电话号码和邮编;组员函数包含:输出各个数据组员值,分别设置和获取各个数据组员值。
编程提醒:
(1)因为姓名、学校和电话号码数据长度是可变,可使用动态数据结构。邮编长度是固定,可定义一个字符数组来存放邮编。将数据组员均定义为私有。
(2)用一个组员函数输出全部组员数据,用一个组员函数完成初始化,用四个组员函数分别设置姓名、学校、电话号码和邮编,再用四个组员函数分别获取姓名、单位、电话号码和邮编。
(3)主函数完成简单测试工作。
类定义参考:
class COMMU
{
private:
char *pName; //姓名,数据组员为私有
char *pSchool; //单位
char *pNum; //电话号码
char Box[10]; //邮编
public:
void Print(void) ; //输出数据组员
void Init(char *,char *,char *,char *); //完成初始化
void FreeSpace(void); //释放数据组员占用空间
void SetName(char *name); //置姓名
void SetScool(char *unit); //置学校名称
void SetNum(char *num); //置电话号码
void SetBox(char *mailnum) ; //置邮编
char *GetName(void); //取姓名
char *GetScool(void ); //取学校
char *GetNum(void); //取电话号码
char *GetBox(void) //取邮编
};
2、将第一个上机试验题中组员函数Init改为结构函数,将组员函数FreeSpace改为析构函数。增加一个缺省结构函数,使指针pName,pSchool和pNum初值为0,使Box包含空字符串。
编程提醒:
(1) 缺省结构函数完成数据组员初始化,依据试验题要求,该缺省结构函数能够是:
COMMU() //缺省结构函数
{
pName = pSchool = pNum =0;
Box[0] = 0;
}
(2) 用结构函数COMMU替换组员函数Init功效,只要将函数名Init改为COMMU,即:
COMMU(char *name,char *unit,char *num,char *b)
{ //重载结构函数
pName = new char [strlen(name)+1];
strcpy(pName,name);
pSchool = new char [strlen(unit)+1];
strcpy(pSchool,unit);
pNum = new char [strlen(num)+1];
strcpy(pNum,num);
strcpy(Box,b);
}
(3) 用析构函数~COMMU替换组员函数FreeSpace,该析构函数为:
~COMMU( ) //析构函数
{
if(pName) delete [] pName;
if(pSchool) delete [] pSchool;
if(pNum) delete [] pNum;
}
3、定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形式表示,即24/36应该以2/3形式表示,并提供public组员函数实现以下功效:
(1) 两个分数相加,结果表示为简化形式;
(2) 两个分数相减,结果表示为简化形式;
(3) 按a/b形式输出分数值,a、b为整数;
(4) 按浮点数形式输出分数值
编程提醒:
完整程序参考代码:
//Rational.h
class Rational {
public:
Rational(int fz, int fm);
void add(Rational &one);
void sub(Rational &one);
void print();
void outputAsFloat();
private:
void simple();
int fenzi;
int fenmu;
};
//Rational.cpp
#include "Rational.h"
#include <iostream.h>
#include <math.h>
Rational::Rational(int fz, int fm)
{
fenzi = fz;
if (fm != 0)
fenmu = fm;
else
fenmu = 1;
simple();
}
void Rational::add(Rational & one)
{
int a, b;
a = fenmu * one.fenmu;
b = fenzi * one.fenmu + fenmu * one.fenzi;
fenmu = a;
fenzi = b;
simple();
}
void Rational::sub(Rational & one)
{
int a, b;
a = fenmu * one.fenmu;
b = fenzi * one.fenmu - fenmu * one.fenzi;
fenmu = a;
fenzi = b;
simple();
}
void Rational::print()
{
cout<<fenzi<<" / "<<fenmu<<endl;
}
void Rational::outputAsFloat()
{
float a = (float)fenzi/fenmu;
cout<<a<<endl;
}
void Rational::simple()
{ for (int i = abs(fenzi); i > 1; i--)
{
if (abs(fenzi) % i == 0 && abs(fenmu) % i == 0)
{
fenzi = fenzi / i;
fenmu = fenmu / i;
}
}
}
//main.cpp
#include "Rational.h"
main()
{ Rational a(24, 18), b(12, 36), c(6, 8);
a.add(b);
b.sub(c);
a.print();
a.outputAsFloat();
b.print();
b.outputAsFloat();
return 0;
}
试验2:堆和拷贝结构函数、静态组员和友元、运算符重载
1、建立一个Stock类,含有股票代码和股票现价两个数据组员。用new自动为Stock类对象分配内存,并将股票”600001”,现价8.89存入内存对应域中。在类中增加静态数据组员记载创建对象个数,增加拷贝结构函数并调用。
编程提醒:
(1) 堆对象分配
Stock p;
p=new Stock;
(2) 堆对象释放
delete p;
(3) 堆对象赋值
p->set(“600001”,8.89);
(4) 拷贝结构函数
Stock(Stock &s);
思索:拷贝结构函数函数体应完成什么功效?
(5) 静态数据组员
static int N_count;
思索:静态数据组员在程序中什么位置初始化?在程序中什么位置计数?
2、对以下圆柱类Column定义:
class Column {
public:
Column(double x, double y, double r, double h);
~Column();
double area(); //求圆柱面积
double volume(); //求圆柱体积
private:
double height; //高度
double radius; //半径
double x; //底面圆心x坐标
double y; //底面圆心y坐标
};
要求:
(1) 实现类Column中四个组员函数;
(2) 增加一个友元函数,实现从键盘读取四个double类型数据对类Column对象进行赋值功效;
(3) 增加一个友元函数,实现将类Column对象输出到屏幕功效,输出信息包含对象基础信息和对象面积和体积。
编程提醒:
友元函数申明:
void friend set(Column &t);
void friend print(Column &t);
3、对于下面定义类Test:
class Test {
private:
int a;
double b;
};
要求:
(1) 为类Test每个数据组员增加一个set函数,并使这些set函数全部能够被连续调用;
(2) 为类Test每个数据组员增加一个get函数。
(3) 假如要求全部get函数全部能够被连续调用,这些函数该怎样编写?
编程提醒:
要满足类对象能够连续调用其组员函数,这些组员函数返回值就必需是调用该函数对象本身,所以返回类型是该类型引用,返回值则是*this
4、定义一个复数类,经过重载运算符: *,/,直接实现二个复数之间乘除运算。编写一个完整程序,测试重载运算符正确性。要求乘法“*”用友元函数实现重载,除法“/”用组员函数实现重载。
编程提醒:
(1) 两复数相乘计算公式为:(a+b i)*(c+d i)=(ac–bd )+(ad+bc) i
(2) 两复数相除计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i
(3) 复数类及运算符重载函数可定义为:
class Complex{
float Real, Image;
public:
Complex(float r=0,float i=0) { Real=r;Image=i;}
void Show()
{cout <<"Real="<<Real<<'\t'<<"Image="<<Image<<'\n';}
friend Complex operator *(Complex &, Complex &);//重载运算符*
Complex operator /(Complex &); //重载运算
展开阅读全文