实验5 类和对象实验报告
更新时间:2023-06-08 19:30:01 阅读量: 实用文档 文档下载
实验5 类和对象实验报告
实验目的:
1.进一步理解类和对象的概念;
2.进一步理解类的成员的访问控制的含义,公有和私有成员的区别;
3.掌握构造函数和析构函数的含义与作用、定义方式和实现;
4.能够根据给定的要求定义类并实现类的成员函数;
5.了解C++面向对象程序设计的基本思想、基本方法和基本步骤;
6.掌握MS Visual C++6.0调试C++程序的基本方法、基本步骤。
实验内容:
一、输入下列程序,按要求进行实验,并记录实验的结果
#include <iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(int x1, int y1){x=x1; y=y1;} Coordinate(Coordinate &p); ~Coordinate(){cout<<"Destructor is called."<<endl;} int getx(){return x;} int gety(){return y;}
private:
};
Coordinate::Coordinate(Coordinate &p){
}
int main(){ x=p.x; y=p.y; cout<<"Copy initianization constructor is called."<<endl; int x, y;
Coordinate p1(3,4); Coordinate p2(p1); Coordinate p3=p2; cout<<"p3=("<<p3.getx()<<","<<p3.gety()<<")"<<endl;
return 0;}
1)运行结果
2)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增加如下语句: cout<<”Constructor is called.”<<endl;
运行结果:
3)error C2512: 'Coordinate' : no appropriate default constructor available
error C2664: '__thiscall Coordinate::Coordinate(class Coordinate &)' : cannot convert parameter 1 from 'const int' to 'class Coordinate &'
A reference that is not to 'const' cannot be bound to a non-lvalue
修改:
#include <iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(int x1, int y1){x=x1; y=y1;} Coordinate(Coordinate &p);
Coordinate();
Coordinate(int i);
~Coordinate(){cout<<"Destructor is called."<<endl;} int getx(){return x;} int gety(){return y;}
private:
};
Coordinate::Coordinate(Coordinate &p){
}
int main(){
Coordinate p1(3,4); Coordinate p2(p1); x=p.x; y=p.y; cout<<"Copy initianization constructor is called."<<endl; int x, y;
Coordinate p5(2);
Coordinate p3=p2; cout<<"p3=("<<p3.getx()<<","<<p3.gety()<<")"<<endl;
return 0;}
4)创建不同对象并调用的时候,必须满足构造函数的参数要求,如果构造函数是需要传递值,对象就该传递值。如果构造函数需要传递的是地址,对象就传递的是地址
二、根据注释语句的提示实现类Date的成员函数,并将完整的程序编译、连接 成功以保证程序能够正确运行
#include <iostream>
using namespace std;
class Date
{
public:
void printDate(){cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;}
void setDay(int dayx){day=dayx;} //设置日的值
void setMonth(int monthx){month=monthx;}//设置月的值
void setYear(int yearx){year=yearx;} //设置年的值
private:
int day, month, year;
};
int main()
{
Date testDay;
testDay.setDay(24);
testDay.setMonth(10);
testDay.setYear(2012);
testDay.printDate();
return 0;
}
运行结果:
三、下面是一个计算器类的定义,请完成该类的成员函数的实现,并设计一个主函数使用该类和相关成员函数以测试该类设计的正确性。
#include <iostream>
using namespace std;
class coutner
{
public:
counter(int number); //构造函数
void increment(); //给value原值加2
void decrement(); //给value原值减2
int getvalue(); //取得计数器值
int print(); //显示计数
private:
int value; //数据成员
};
coutner::counter(int number)
{
value=number;
}
void coutner::increment()
{
value+=2;
}
void coutner::decrement()
{
value-=2;
}
int coutner::getvalue()
{
return value;
}
int coutner::print()
{
cout<<"The value is "<<value<<endl;
return value;
}
int main()
{
coutner c;
c.counter(1);
c.increment();
cout<<"The output is "<<c.getvalue()<<endl; c.decrement();
c.print();
c.increment();
cout<<"The output is "<<c.print()<<endl;
return 0;
}
四、定义一个类ClsName,要求该类设计如下:
(1)该类有两个整型数据成员x和y;
(2)为该类重载三个不同的构造函数:分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;
(3)设计2个成员函数用来读取数据成员x和y;
(4)设计2个成员函数用来设置数据成员x和y;
(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;
(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。
#include <iostream>
using namespace std;
class ClsName
{
private:
int x,y;
public:
ClsName(){x=0,y=0;}
ClsName(int c){x=c,y=0;}
ClsName(int a,int b){x=a,y=b;}
int getx(){return x;}
int gety(){return y;}
void setx(int a){x=a;}
void sety(int b){y=b;}
void print(){cout<<"x="<<x<<" y="<<y<<endl;}
};
int main()
{
ClsName cls1;
ClsName cls2(5,6);
ClsName cls3(7);
cls1.print();
cls2.print();
cls3.print();
return 0;
}
五、创建一个名为Complex的类,进行复数的算术运算。编写一个测试程序来测试该类。
#include<iostream>
using namespace std;
class Complex
{
private:
double x1,y1,x2,y2;
public:
Complex(){x1=1;y1=1;x2=1;y2=1;}
Complex(int a,int b,int c,int d){x1=a;y1=b;x2=c;y2=d;}
Void jia(){ cout<<"加:("<<x1<<","<<y1<<")+("<<x2<<","<<y2<<")="<<"("<<x1+x2<<","<<y1+y2<<")"<<endl; }
void jian(){ cout<<"减:("<<x1<<","<<y1<<")-("<<x2<<","<<y2<<")="<<"("<<x1-x2<<","<<y1-y2<<")"<<endl; }
void chen(){ cout<<"乘:("<<x1<<","<<y1<<")*("<<x2<<","<<y2<<")="<<"("<<(x1*x2-y1*y2)<<","<<(x1*y2+y1*x2)<<")"<<endl;}
void chu(){ cout<<"
除:("<<x1<<","<<y1<<")/("<<x2<<","<<y2<<")="<<"("<<static_cast<double>(x1*x2+y1*y2)/(x2*x2+y2*y2)<<","<<static_cast<double>(y1*x2-x1*y2)/(x2*x2+y2*y2)<<")"<<endl<<endl;}
void set()
{ cout<<"第一个复数:" ;
cin>>x1>>y1;
cout<<"第二个复数:";
cin>>x2>>y2;
}
};
int main()
{
Complex a;
Complex c(4,3,2,1);
cout<<"以(a, b)的形式打印复数,其中a为实部,b为虚部,其中系统默认的复数为(1,1)"<<endl<<endl;
cout<<"1.未初始化值"<<endl;
a.jia();
a.jian();
a.chen();
a.chu();
cout<<"2.初始化值"<<endl;
c.jia();
c.jian();
c.chen();
c.chu();
cout<<"3.自定义"<<endl;
a.set();
a.jia();
a.jian();
a.chen();
a.chu();
return 0;
}
实验总结:
本次实验总体上来说难度不是非常大,但是还是遇到一些问题,比如:第一题中Coordinate(Coordinate &p)构造函数中的参数可以是类名吗?第四题中的几种构造函数的定义和申明,开始的时候不怎么会,最后查阅了相关资料解决了。第五题实现了零个参数、四个参数的构造函数,该程序只要懂复数的算法就会做了。虽然没多少题,但是还是花了我很多时间,这就是编程还不够熟、算法不够高明,我相信在后面的实验中,只要我努力、坚持,我的编程技术就会有所提高。
正在阅读:
实验5 类和对象实验报告06-08
强电弱电图例符号大(全)10-29
高一生物细胞中的无机物测试题103-18
北京市房地产价格影响因素分析04-12
人教版新目标九年级英语初三上册Unit3教学设计(共七课时)10-17
桃花源记复习资料03-09
2016-2017学年鲁教版地理必修一一师一优课必修一教学设计:3.2《03-08
钢管混凝土ABAQUS建模过程04-14
瘦身瑜伽06-26
上市公司融资结构与公司绩效研究综述12-16
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 实验
- 对象
- 报告
- 人文社科专业大学生创新创业能力培养的思考
- 毕业设计电子密码锁(基于AT89C51)
- 概率统计A期末模拟试卷(二)参考答案 zucc
- 八年级数学平方根立方根实数练习题
- 基于51的门禁系统
- 钢丝网骨架聚乙烯复合管安装操作规程
- 新视野大学英语读写二教学大纲
- 浅谈中学英语教学中的素质教育
- 第十六章第2节串、并联电路中电压的规律
- 商务英语词汇教程(学生)
- SMT技术员 岗位职责表
- 伊莱克斯烤箱爆炸图1
- 注射用头孢匹胺与注射用乳糖酸阿奇霉素存在配伍禁忌
- 我是如何在720小时内打造500人的微商团队
- C25普通混凝土配合比设计说明书005
- 《品德与社会》三年级上册教学计划
- uml需求分析和系统建模
- 分析次贷危机之后中国的扩张性财政政策(final)
- 国际贸易法作业题
- 旷达的苦乐观——苏轼《定风波》赏析