实验一类的定义及其类对象的封装性
实验一 类的定义及其类对象的封装性
实验目的和要求:
1. 了解 C++ 类的构成
2. 掌握声明类的方法,类和类的成员的概念以及定义对象的方法 3. 掌握成员函数的定义 4. 熟悉构造 函数和析构函数 5. 了解 C++ 的封装性
实验内容:
1. 建立一个对象数组,内放 5 个学生的数据(学号、成绩),设计一个函数 Max ()用来计
算 5 个学生中成绩最高者,并输出其学号
2. 定义一个时间类,从键盘输入年、月、日,运行程序后可计算并显示该天地日期和该天是星
期几,同时打印出昨天和明天的日期(注意:每月1号的前一天和30号或31号的后一天的日期输出)。
3. 设计并测试一个名为R的矩形类,其属性为矩形左上角和右上角两点的坐标,输入点坐标后,
能计算出矩形的面积。
实验原理:
1、C ++类的声明和对象的定义;
2、类的成员函数的定义、性质、功能及调用; 3、类的封装性;
4、构建函数、析构函数的功能; 5、友元函数的概念和设计方法; 6、C++程序的构成与实现;
编程思想:
1、算法开始:begin
算法组成: 建立类 Student :
类中含有成员num,score以及成员函数(输入、输出数据)
建立求最高成绩的函数:
核心思想:用对象指针指向对象数组的首部,利用指针实现参数的
传递
赋值:max=(*p).score
利用循环和选择结构选择最大值:
If (p+i->score>max ) then max= p+i->score 用变量max记忆选出的最大值;
输出 循环结束选择出的最大值 主函数: 定义对象数组 stu[5]
利用循环实现对象数组的输入输出: 输入 调用输入函数stu[i].set 输出 调用 stu[i].diasplay
调用 max,实现最高成绩学生学号的输出 算法结束:end 2
程序代码:
程序一:
#include #include using namespace std; class Student {
public:
int num; int score; void set() {
cin>>num>>score; }
void display() {
cout
void max(Student *p) {
int max;
max=(*p).score; int i,k=0;
for(i=0;i
运行结果:
if((p+i)->score>max) {
max=(p+i)->score; k=(p+i)->num; } }
cout
int main() {
const int n = 5; int i; Student stu[n];
cout
for(i=0;i
cout
for(i=0;i
system("PAUSE"); }
程序二:
#include #include #include
using namespace std; class tdate { private: int year; int month; int day; public:
tdate(int m,int d,int y)
{month=m;day=d;year=y;} int isleapyear(); string weekday(); void yesterday(); void tomorrow(); };
int tdate::isleapyear() {
return
(year%4==0&&year%100!=0||year%400==0); }
string tdate::weekday() {
int sum,n,i;
for (i=0;i
case 1:sum=sum+day;break; case 2:sum=31+day;break; case 3:sum=60+day;break; case 4:sum=91+day;break; case 5:sum=121+day;break; case 6:sum=152+day;break; case 7:sum=182+day;break; case 8:sum=213+day;break; case 9:sum=243+day;break; case 10:sum=273+day;break; case 11:sum=304+day;break; case 12:sum=334+day;break; }
if(isleapyear()&&month>2) sum=sum-1; n=sum%7;
string week[7]={"星期三","星期四","星期五","星期六","星期日","星期一","星期二"}; //默认0年1月1号是星期五 cout
is:"
n]
void tdate::yesterday() {
if(day==1&&month==1) cout
is:"
case 2: case 4: case 6: case 8: case 9: case 11:{ cout
case 5: case 7: case 10: case 12:{ cout
case 3:{
if (isleapyear()) { cout
{cout
is:"
if(day!=1) { cout
}
void tdate::tomorrow() { if(day
is:"
if(day==29&&month==2) cout
is:"
if((!(year%4==0&&year%100!=0||year%400==0))&&day==28&&month==2) cout
is:"
if((year%4==0&&year%100!=0||year%400==0)&&day==28&&month==2) cout
is:"
if(day
is:"
if(day== 31&&month==12) cout
is:"
if(day==31&&month!=12) cout
is:"
if(day==30&&(month==4||month==6||month==9||month==11))
cout
is:"
if(day==30&&(month==1||month==3||month==5||month==7||month==8||month==10||month==12))
cout
is:"
int main() { int m,y,d;
cin >> m >>d>>y;
运行结果:
普通的某一天 :
一年的第一天:
一年的最后一天:
月末为31号的某一天:
月末为30号的某一天:
闰年2月的某一天:
tdate a(m,d,y); a.weekday(); a.yesterday(); a.tomorrow(); system("PAUSE"); }
平年2月的某一天:
某个月的第一天:
程序三:“ 代码:
#include #include using namespace std;
class Rectangle
{ public:
int left, top, right, bottom; int area(){ return ((right-left)*(bottom-top));} };
int main() {Rectangle r1;
cin>>r1.left>>r1.top>>r1.right>>r1.bottom; cout
运行结果: