实验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)构造函数中的参数可以是类名吗?第四题中的几种构造函数的定义和申明,开始的时候不怎么会,最后查阅了相关资料解决了。第五题实现了零个参数、四个参数的构造函数,该程序只要懂复数的算法就会做了。虽然没多少题,但是还是花了我很多时间,这就是编程还不够熟、算法不够高明,我相信在后面的实验中,只要我努力、坚持,我的编程技术就会有所提高。

本文来源:https://www.bwwdw.com/article/wof1.html

Top