《 面向对象程序设计 》实验报告二
(说明:此部分应包含:实验内容、实验步骤、实验代码、实验结果及分析等。) 1. 求3个长方柱的体积,请声明Box类,数据成员包括length(长)、width(宽)、height(高)。要求用 成员函数实现以下功能: (1)由键盘分别输入3个长方柱的长、宽、高; (2) 计算长方柱的体积; (3) 输出3个长方柱的体积; 实验分析:先声明一个类Box,私有数据成员包括length(长)、width(宽)、height(高),在公共域声明函数volum()与display() 分别用来获取所求长方体体积所需的参数和对参数进行处理并返回。最后在主函数中调用所需函数。 类声明文件(*.h文件): #include <iostream> using namespace std; class Box { public:
void volum(); void display();
private: double length; double width; double height; }; 类实现文件(*.cpp文件): #include "Box.h" void Box::volum() { cin>>length; cin>>width; cin>>height;
} void Box::display() { cout<<"长方体体积为"<< length*width*height<<endl; } 类的使用文件 (*.cpp,主函数文件): #include "Box.h" int main() { Box Box1; Box1.volum(); Box1.display(); return 0; } 运行结果: |
*在定义多文件程序时,类实现与类使用文件中需要调用类声明里面的函数或变量,因此需添加其头文件,这里即指 #include "Box.h"
2. 定义一个日期类Date,该类的对象用于存放一个日期。 要求: (1) 该类可以提供的操作有: void printDate( ); //显示日期,格式如:2010/6/8 (2) 允许对Date类的对象作以下定义: Date d1(2010,6,8); Date d2; Date d3(d1); (3) 在主函数中分别调用d1,d2,d3的printDate( ); 实验分析: |
定义一个类Date,其中声明printdata()函数用于显示日期和重载函数Date用于存放日期;这里分别定义 Date(int a,int b,int c)用于自定义日期; Date()初始化日期; Date(Date &d)间接调用日期;
类声明文件(*.h文件):
#include<iostream> using namespace std; class Date { public: void printData(); Date(int a,int b,int c); Date(); Date(Date &d); private: int year; int month; int day;
}; |
类实现文件(*.cpp文件):
#include"Date.h" void Date::printData() { cout<<year<<"/"<<month<<"/"<<day<<endl; } Date::Date(int a,int b,int c) { year=a; month=b; day=c;
}
Date::Date(){ year=1970; month=1; day=1; } Date::Date(Date &d) { year=d.year; month=d.month; day=d.day; } |
类的使用文件 (*.cpp,主函数文件):
#include"Date.h" int main() { Date d1(2010,6,8); d1.printDate(); Date d2; d2.printDate(); Date d3(d1); d3.printDate(); return 0; } 运行结果: *一个函数不能既作为重载函数,又作为有默认参数的函数。 3. 有如下类定义: Class Point { int xx,yy; public: Point():xx(0),yy(0){ } Point(int x, int y=0):xx(x),yy(y){ } }; 请修改构造函数定义并补充完整main函数,使得主函数中运行语句Point a(2), b[3], c;后能够正确输出构造函数被调用的次数。 实验分析: 这里使用了重载函数Point;定义一个静态变量count用于装载函数调用的次数,首先将其初始化为0,每调用一次Point函数对其+1 *普通局部变量: 在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。 普通局部变量存储于进程栈空间,使用完毕会立即释放。 *静态局部变量: 使用static修饰符定义的局部变量,即使在声明时未赋初值,编译器也会把它初始化为0。 静态局部变量存储于进程的静态数据区,即使函数返回,它的值也会保持不变。 |
类声明文件(*.h文件):
#include<iostream> using namespace std; class Point { int xx, yy; static int count; public: Point(); Point(int x, int y ); static int getCount(); }; |
类实现文件(*.cpp文件):
#include "Point.h" int Point::count = 0; Point::Point() : xx(0), yy(0) { count+=1; } Point::Point(int x, int y) : xx(x), yy(y) { count+=1; } int Point::getCount() { return count; } |
类的使用文件 (*.cpp,主函数文件):
#include <iostream> #include "Point.h" int main() { Point a(2), b[3], c; cout << "构造函数被调用的次数: " << Point::getCount() << endl; return 0; } 运行结果: 结果分析: 构造函数被调用次数为5=1+3+1;经分析a(2)、c 皆为一个数则函数会被分别调用一次,而b[3]为一个数组,含3个元素 函数会被调用3次。 |