资源描述
实验二 面向对象编程
一、 实验目的:
掌握类与对象的定义方法,成员函数的实现与调用方法,领会类实现数据隐藏与封装的原理。
二、 实验时间:
三、 实验地点:
四、 实验内容:
1、 编写Circle类,有数据成员Radius,
成员函数get_area()用于计算面积,
get_perimeter()用于计算周长,
disp( )用于显示面积和周长,
set_radius()设置半径,
get_radius()获取半径。
完善必要的构造函数,构造一个Circle的对象进行测试,对构造函数和析构函数的调用情况进行分析。
#include "stdafx.h"
#include<iostream>
using namespace std;
const double PI=3.1415926;
class Circle
{
public:
double get_area();//用于计算面积
double get_perimeter();//用于计算周长
void disp();//用于显示面积和周长
void set_radius(double r);//设置半径
double get_radius();//获取半径
Circle(double r=0);//调用构造函数
Circle(Circle &r);//复制构造函数
~Circle();//析构函数
private:
double radius;
};
double Circle::get_area()
{return radius*radius*PI;
}
double Circle::get_perimeter()
{return 2*radius*PI;
}
void Circle::disp()
{
cout <<"圆的半径:"<<get_radius()<<endl;
cout <<"圆的面积:"<<get_area()<<endl;
cout <<"圆的周长:"<<get_perimeter()<<endl;
}
void Circle::set_radius(double r)
{radius=r;
}
double Circle::get_radius()
{return radius;
}
Circle::Circle(double r)
{
radius=r;
cout<<"调用构造函数"<<endl;
}
Circle::Circle(Circle &r)
{
radius=r.radius;
cout<<endl<<"调用复制构造函数"<<endl;
}
Circle::~Circle()
{
radius=0;
cout<<"调用析构函数"<<endl;
}
int main(int argc, char* argv[])
{
double r;
cout<<"请输入半径:";
cin>>r;
Circle c1(r);
c1.disp();
Circle c2=c1;
cout<<"测试复制构造体:"<<endl;
c2.disp();
cout<<endl<<"初始参数:"<<endl;
Circle c3;
c3.disp();
cout<<"请输入半径:";
cin>>r;
c3.set_radius(r);
cout<<"结果:"<<endl;
c3.disp();
system("pause");
return 0;
}
2、 编写圆柱体类Cylinder,有数据成员Circle对象和长度Len,
成员函数get_vol() 计算体积,
get_area()计算表面积。
完善必要的构造函数和拷贝构造函数,构造Cylinder的对象进行测试。对构造函数,拷贝构造函数和析构函数的调用情况进行分析。
// shiyan2_2.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "iostream"
using namespace std;
const double PI=3.1415926;
class Circle
{
public:
double get_area();//用于计算面积
double get_perimeter();//用于计算周长
void disp();//用于显示面积和周长
void set_radius(double r);//设置半径
double get_radius();//获取半径
Circle(double r=0);//调用构造函数
Circle(Circle &r);//复制构造函数
~Circle();//析构函数
private:
double radius;
};
double Circle::get_area()
{return radius*radius*PI;
}
double Circle::get_perimeter()
{return 2*radius*PI;
}
void Circle::disp()
{
cout <<"圆的半径:"<<get_radius()<<endl;
cout <<"圆的面积:"<<get_area()<<endl;
cout <<"圆的周长:"<<get_perimeter()<<endl;
}
void Circle::set_radius(double r)
{radius=r;
}
double Circle::get_radius()
{return radius;
}
Circle::Circle(double r)
{
radius=r;
}
Circle::Circle(Circle &r)
{
radius=r.radius;
}
Circle::~Circle()
{
radius=0;
}
class cylinder
{public:
double get_vol(){return c1.get_area()*len;};//计算体积
double get_area(){return 2*c1.get_area()+c1.get_perimeter()*len;};//计算表面积
void set_len(double l){len=l;};//设置长度
double get_len(){return len;};//获取长度
//----初始Circle类相关数据---
void set_Radius(double r){c1.set_radius(r);};
double get_Radius(){return c1.get_radius();};
double get_Area(){return c1.get_area();};
double get_Perimeter(){return c1.get_perimeter();};
//------------------------
//----显示相关数据------
void disp0();
void disp1();
//--------------------
cylinder(Circle c,double len=0);//调用构造函数
cylinder(cylinder &c);//复制构造函数
~cylinder();//析构函数
private:
Circle c1;
double len;
};
void cylinder::disp0()
{
cout <<"圆柱底面积:"<< get_Area() <<endl;
cout <<"圆柱底面周长:"<< get_Perimeter() <<endl;
}
void cylinder::disp1()
{
cout <<"圆柱的表面积:"<<2*get_Area()+get_Perimeter()*len<<endl;
cout <<"圆的体积:"<<get_Area()*len<<endl;
}
cylinder::cylinder(Circle c,double len):c1(c),len(len){cout<<"调用圆柱构造函数:"<<endl;}
cylinder::cylinder(cylinder &c):c1(c.c1){len=c.len;cout<<"调用圆柱复制构造函数"<<endl;}
cylinder::~cylinder()
{c1.set_radius(0);
len=0;
cout<<"调用圆柱的析构函数"<<endl;
}
int main(int argc, char* argv[])
{double Ra,len;
cout<<"输入圆柱体半径:";
cin>>Ra;
Circle c;
cylinder c2(c);
c2.set_Radius(Ra);
c2.disp0();
cout<<endl<<"输入圆柱体高:";
cin>>len;
c2.set_len(len);
cout<<"结果为:"<<endl;
c2.disp1();
system("pause");
return 0;
}
3、 设计学生类Stu,含no(学号),name(姓名),deg(成绩)数据成员,成员函数有setdata()用于设置对象,disp()用于输出80—89分段学生数据。在main()中定义对象数组,用于存储输入学生数据。
// shiyan2_3.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
class Student
{public:
void setdata(int no,string name,float deg);//用于设置对象
void disp();//用于输出80—89分段学生数据
private:
int no;//学号
string name;//姓名
float deg;//成绩
};
void Student::setdata(int No,string Name,float Deg)
{ no=No;
name=Name;
deg=Deg;
}
void Student::disp()
{ if((deg>=80.0)&&(deg<90.0))
{
cout<<no<<"\t"<<name<<"\t"<<deg<<endl;
}
}
int main()
{
int n,i,No;
float Deg;
string Name;
Student stu[100];
cout<<"请输入要添加学生的数量:";
cin>>n;
for(i=0;i<n;i++)
{
cout<<endl;
cout<< "请输入第"<<i+1<<"名学生的学号:";
cin>> No;
cout<< "请输入第"<<i+1<<"名学生的姓名:";
cin>> Name;
cout<< "请输入第"<<i+1<<"名学生的成绩:";
cin>> Deg;
stu[i].setdata(No,Name,Deg);
}
cout << "成绩在80~89分之间的学生如下:" <<endl;
cout<<"学号"<<"\t姓名"<<"\t成绩"<<endl;
for(i=0;i<n;i++)
stu[i].disp();
system("pause");
return 0;
}
五、实验要求:
在上机前写出全部源程序;
六、实验结果分析:
1、编写Circle类,有数据成员Radius,
成员函数get_area()用于计算面积,
get_perimeter()用于计算周长,
disp( )用于显示面积和周长,
set_radius()设置半径,
get_radius()获取半径。
完善必要的构造函数,构造一个Circle的对象进行测试,对构造函数和析构函数的调用情况进行分析。
2、编写圆柱体类Cylinder,有数据成员Circle对象和长度Len,
成员函数get_vol() 计算体积,
get_area()计算表面积。
完善必要的构造函数和拷贝构造函数,构造Cylinder的对象进行测试。对构造函数,拷贝构造函数和析构函数的调用情况进行分析。
3、设计学生类Stu,含no(学号),name(姓名),deg(成绩)数据成员,成员函数有setdata()用于设置对象,disp()用于输出80—89分段学生数据。在main()中定义对象数组,用于存储输入学生数据。
七、实验心得体会及问题反馈:
类与对象,通过实验初步熟悉。对于class类其实与C语言中的结构体类似,只不过class分为public private protect三类,而且可以把函数作为类的成员。所谓对象就是把一个抽象的类具体化,比如我定义一个class you{}; you me; 这个me就是一个对象。
展开阅读全文