CSDN的各位友友们你们好,今天千泽为大家带来的是
燕山大学-面向对象程序设计实验 - 实验2 类和对象:类的构建-实验报告,
接下来让我们一起进入c++的神奇小世界吧,相信看完你也能写出自己的实验报告!
如果对您有帮助的话希望能够得到您的支持和帮助,我会持续更新的!
🚩2.1 实验目的
1.类的定义;
2.类对象的使用;
3.类成员变量的定义和使用;
4.类成员函数的定义和使用;
5.理解类的作用域;
6.理解类的声明;
7.理解类中private和public权限的声明依据。
2.2 实验内容
2.2.1程序阅读
1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include class CDate{void Set(int m, int d, int y ){month = m ; day = d ;year = y ;}int IsLeapYear(){return (year%4 == 0 && year%100 != 0)||(year%400 == 0);}public:void Print(){cout<
1️⃣
问题一:以上程序编译能通过吗,为什么,应该如何改正?
答:不能编译通过。(1)Set和IsLeapYear未声明为public,无法调用。(2)未声明命名空间。 (3)主函数返回值为void。修改后代码如下:
#include using namespace std;class CDate{public:void Set(int m, int d, int y ){month = m ; day = d ;year = y ;}int IsLeapYear(){return (year%4 == 0 && year%100 != 0)||(year%400 == 0);}void Print(){cout<
2️⃣
问题二:类CDate中分别有哪些成员函数和成员变量,它们分别属于哪种访问权限?
答:成员函数有Set(int m, int d, int y )、IsLeapYear()、Print(),访问权限为public。
成员变量为month、day、year,访问权限为private。
3️⃣
问题三:①处语句的意思是什么?
答:新建一个CDate类对象,命名为a。
🚀
2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。
#include int month;//全局变量 int day; int year;void Set(int m,int d,int y) -----------------------------------------------------a{::month=m; -----------------------------------------------------①::day=d;::year=y;}class CDate{public:void Set(int m,int d,int y) -----------------------------------------------------b{::Set(m,d,y); -----------------------------------------------------②}void Print(){cout<
1️⃣
问题一:①处是在给成员变量赋值,还是在给全局变量赋值,如果去掉域作用符::,程序是否还能正确运行?
答:①处是在给全局变量赋值。去掉::后,程序无法正常运行。
2️⃣
问题二:②处调用的哪个函数,如果去掉域作用符::,程序是否还能正确运行?
答:②处调用的全局Set函数。去掉::后,程序无法正常运行。
3️⃣
问题三:该程序的输出结果是什么,试解释该输出结果。
答:输出结果为4250192/7077760/4250286
程序调用a.Set(10,15,2007) 时,使用::调用全局Set函数修改全局变量month、day、year。但调用a.Print()输出时,输出的为成员变量month、day、year,成员变量未初始化,故为随机值。
🗼2.2.2 程序设计
1.试设计一个复数类,该类有实部和虚部两个成员数据,成员数据采用私有访问权限,同时该类有两个共有成员函数,分别用来设置成员数据和输出成员数据,在主函数中分别采用对象方式,指针方式和引用方式来调用该类的公有函数设置和输出成员数据。
#include using namespace std;class CNum{private:int a;//实部int b;//虚部public:void set(int _a,int _b){a=_a;b=_b;}void print(){if(b==0)cout<>a>>b;CNum c;//对象方式c.set(a,b);c.print();cout<<"请输入复数的实部和虚部,以空格分割:";cin>>a>>b;CNum *c1;//指针方式c1=&c;(*c1).set(a,b);(*c1).print();cout<<"请输入复数的实部和虚部,以空格分割:";cin>>a>>b;CNum &c2=c;//引用方式c2.set(a,b);c2.print();}
🚲2.3 思考题
1.试指出以下程序的错误,并改正之。
#include class CPoint{public:unsigned x,unsigned y;bool IsInCircle(CCircle *Circle){return (((x-Circle->Center.x)*(x-Circle->Center.x)+(y-Circle->Center.y)*(y-Circle->Center.y))<=Circle->Radius*Circle->Radius);}};class CCircle{public:unsigned Radius;CPoint Center;};void main(){}
答:CCircle类在定义前被使用,应调整顺序且将CPoint中成员函数实现放在两个类的定义后。修改后代码如下:
#include using namespace std;class CCircle;class CPoint{public:unsigned x,y;bool IsInCircle(CCircle *Circle);};class CCircle{public:unsigned Radius;CPoint Center;};bool CPoint::IsInCircle(CCircle *Circle){return (((x-Circle->Center.x)*(x-Circle->Center.x)+(y-Circle->Center.y)*(y-Circle->Center.y))<=Circle->Radius*Circle->Radius);}int main(){}
上一篇:Java常见面试题(实习篇)