1、C+作业79C+作业(7-9)实 验 报 告课程名称 面向对象程序设计 专业班级 姓 名 学 号 计算机技术与工程学院和谐 勤奋 求是 创新实验类别验证同组人数1 成 绩指导教师签字:实验七 利用友元编程一、实验目的1掌握友元函数和友元类的概念、定义和作用。2会使用友元编程。3进一步学习内存空间动态分配和释放的方法。二、实验内容1有一个向量类Vector,包括一个点的坐标位置x和y,设计两个友元函数,实现两个向量的加法和减法运算。2定义一个由y=ax+b确定的直线类Line,该类的构造函数初始化直线,成员函数Print显示该直线方程,友元函数SetPoint()求解两条直线的交点。3. 下列程
2、序是有关友元类的,程序中将A类声明为B类的友元类,A类中所有的成员函数都是B类的友元函数,请给程序填空。 #inlcude class B; class A private: int x; public: A(int xx)x=xx; int Set(B&); int Get()return x; ; class B private: int x; public: B(int xx) friend ;int A:Set( ) return x=b.x;void main() A a(10); B b(20); couta.Get()endl; a.Set(b); couta.Get()endl
3、; 三、实验步骤1. 运用学过的知识,实验前在纸上写出程序。2. 根据程序要求,先定义类,包括其数据成员和成员函数。3. 分析使用的是友元类还是友元函数,通过友元要处理哪些问题。4. 在主函数中完成相应的功能。5. 上机编辑、编译、调试和运行,并修改错误。四、实验报告1. 写出实验目的。2. 写出实验内容和程序清单。3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。二.实验内容1. #includeclass Vectorpublic: Vector(double m=0,double n=0) x=m; y=n; void display() cout(x,y)endl; fr
4、iend Vector operator+(Vector &a,Vector &b) Vector t; t.x=a.x+b.x; t.y=a.y+b.y; return t; friend Vector operator-(Vector &a,Vector &b) Vector t; t.x=a.x-b.x; t.y=a.y-b.y; return t; Vector() private: double x,y;void main() Vector a1(6,8),a2(9,5),a3,a4; cout向量a1=; a1.display(); cout向量a2=; a2.display();
5、 a3=a1+a2; couta1+a2=; a3.display(); a4=a1-a2; couta1-a2=; a4.display();2.2定义一个由y=ax+b确定的直线类Line,该类的构造函数初始化直线,成员函数Print显示该直线方程,友元函数SetPoint()求解两条直线的交点。#includeusing namespace std;class Linepublic: Line(double m=0,double n=0) a=m; b=n; void print() cout直线y=ax+b;endl; void friend setpoint(Line &L1,Lin
6、e &L2) double x,y; if(L1.a=L2.a) cout两直线平行,无交点; else x=(L1.b-L2.b)/(L2.a-L1.a); y=L1.a*x+L1.b; cout两直线交点为(x,y)endl; Line() private: double a,b; ;void main() Line L1(4,6),L2(9,8); L1.print(); L2.print(); setpoint(L1,L2);3. #include class B; class A private: int x; public: A(int xx)x=xx; int Set(B&);
7、int Get()return x; ; class B private: int x; public: B(int xx) x=xx; friend class A ; ;int A:Set( B&b ) return x=b.x;void main() A a(10); B b(20); couta.Get()endl; a.Set(b); couta.Get()endl; 个人总结: 本次实验目的主要是熟悉使用友元编程,在第一个程序中使用了两个友元函(friend Vector operator+(Vector &a,Vector &b)和friend Vector operator-(
8、Vector &a,Vector &b))数进行对向量的运算,从而实现了向量之间的加减运算,通过主函数赋值,得出运算结果。第二个程序主要实现的是求不同的两二维直线是否相交,若相交求交点的运算,通过友元函数(void friend setpoint(Line &L1,Line &L2))对保护成员的调用,实现了函数功能,最后一个程序是利用友元类来实现函数功能。实验题目实验八 继承和派生的编程实验室9302机房实验时间2015 年 月 日 实验类别验证同组人数1 成 绩指导教师签字:一、实验目的1了解继承在面向对象程序设计中的重要作用。2理解继承与派生的概念,掌握单继承和多继承的定义方法。3熟悉公
9、有派生和私有派生的访问特性。4掌握继承中基类和派生类的构造函数定义和调用过程。5了解虚基类的作用和用法,会使用虚基类,学习虚基类在解决二义性问题中的作用。二、实验内容1有以下程序,请完成下面的工作:(1)阅读程序,写出运行后的输出结果;(2)然后上机运行,验证结果是否正确;(3)分析程序执行过程,尤其是调用构造函数和析构函数的过程。#include class Apublic: A()cout“constructing A”endl; A()cout“destructing A”endl;class B:public Apublic: B()cout“constructing B”endl;
10、B()cout“destructing B”endl;class C:public Bpublic: C()cout“constructing C”endl; C()cout“destructing C”endl;void main() C c1; 2事先编写好程序:分别声明Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部),要求:(1)在两个基类中都包含有姓名、年龄、性别、地址、电话等数据成员;(2)在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_
11、Cadre类中还包含数据成员wages(工资);(3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域;(4)在类体中声明成员函数,在类外定义成员函数;(5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、地址、电话,然后再用cout语句输出职务和工资。三、实验步骤1. 运用学过的知识,实验前在纸上写出程序。2. 根据程序要求,分析用到几个类,哪些是基类,哪些是派生类,采用何种继承方式。3. 先设计基类,再设计派生类,派生类成员函数应该处理哪些数据。4. 在主函数中创建对象
12、,创建基类对象还是派生类对象时,通过对象调用哪些成员函数。注意:基类和派生类的构造函数和析构函数的执行顺序。5. 上机编辑、编译、调试和运行,并修改错误。四、实验报告1. 写出实验目的。2. 写出实验内容和程序清单。3. 写出编程思路和类层次图,体会基类与派生类的关系。4. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。1.2.#include#includeusing namespace std;class teacherpublic: teacher(string nam,int a,char s,string ad,string tele,string t):name(nam
13、),age(a),sex(s),address(ad),telephone(tele),title(t) void display();protected: string name; int age; char sex; string address; string telephone; string title;void teacher:display() cout姓名:teacher:nameendl; cout年龄:teacher:ageendl; cout性别:teacher:sexendl; cout地址:teacher:addressendl; cout电话:teacher:telephoneendl; cout职称:teacher:titleendl;class cadrepublic: cadre(string nam,int a,char s,string ad,string tele,strin
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1