实验五 构造函数与析构函数的编程
一、实验目的
1.进一步加深对类和对象的理解。
2.掌握类的构造函数和析构函数的概念、意义和使用方法。
3.掌握重载构造函数的含义和使用。
4.编写一个较为复杂的类和对象的应用程序。
二、实验内容
1.设计一个程序,定义一个矩形类,包括数据成员和函数成员。要求有构造函数、析构函数,还有一个成员函数area( )用来计算并显示矩形的面积,并编写main 函数进行测试。
Class Rect
{public:
int Area_int();
Rect(int l, int w);
~Rect();
private:
int nLength;
int nWidth;
};
2.重载构造函数。修改上题,一种构造函数用整型变量记录矩形的长和宽,另一种构造函数用double 型记录矩形的长和宽,然后完成成员函数及主函数。
Class Rect
{public:
int Area_int();
double Area_double();
Rect(double l, double w);
Rect(int l, int w);
~Rect();
private:
int nLength;
int nWidth;
double mLength;
double mWidth;
};
3.构造一个类countstr ,要求用构造函数设置计数器count 的初始值为0,成员函数countchar()不返回任何值,它要求用户输入一段文字,按Enter 键后结束计算,用count 记录输入的字符数,成员函数getchar()返回count 的整数值。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先设计类,设计此类的数据成员及成员函数。
3. 注意数据成员的类型,成员函数完成的功能,构造函数与析构函数完成的功能。
4. 在主函数中创建对象,通过对象调用哪些成员函数。注意:创建对象时,构造函数是怎样执行的 程序结束时,释放对象时,析构函数是怎样执行的。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 在实验报告中写出实验内容第1题答案。
4. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验六 利用友元编程
一、实验目的
1.掌握友元函数和友元类的概念、定义和作用。
2.会使用友元编程。
3.进一步学习内存空间动态分配和释放的方法。
二、实验内容
1.有一个向量类Vector ,包括一个点的坐标位置x 和y ,设计两个友元函数,实现两个向量的加法和减法运算。
2.定义一个由y=ax+b确定的直线类Line ,该类的构造函数初始化直线,成员函数Print 显示该直线方程,友元函数SetPoint()求解两条直线的交点。
3. 下列程序是有关友元类的,程序中将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
};
)
{ return x=b.x;}
void main()
{ A a(10);
B b(20);
couta.Set(b);
cout}
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先定义类,包括其数据成员和成员函数。
3. 分析使用的是友元类还是友元函数,通过友元要处理哪些问题。
4. 在主函数中完成相应的功能。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验七 继承与派生的编程
一、实验目的
1.了解继承在面向对象程序设计中的重要作用。
2.理解继承与派生的概念,掌握单继承和多继承的定义方法。
3.熟悉公有派生和私有派生的访问特性。
4.掌握继承中基类和派生类的构造函数定义和调用过程。
5.了解虚基类的作用和用法,会使用虚基类,学习虚基类在解决二义性问题中的作用。
二、实验内容
1.有以下程序,请完成下面的工作:
1)阅读程序,写出运行后的输出结果;
2)然后上机运行,验证结果是否正确;
3)分析程序执行过程,尤其是调用构造函数和析构函数的过程。
#include
class A
{public:
A(){cout
~A(){cout
};
class B:public A
{public:
B(){cout
~B(){cout
};
class C:public B
{public:
C(){cout
~C(){cout
};
void main()
{ C c1;
}
2.定义一个Point 类,派生出Rectangle 类和Circle 类,计算各派生类对象的面积Area( )。编写一
个完整程序进行测试。
3. 定义并描述一个人员类Person ,它派生出学生类Student 和教师类Teacher, 学生类和教师类共同派生出在职读书的教师类Stu_Tech。人员类有姓名、性别、身份证号、出生年月等信息;学生类有学号、成绩等信息;教师类有职务、职称等信息。编写一个完整程序进行测试。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,分析用到几个类,哪些是基类,哪些是派生类,采用何种继承方式。
3. 先设计基类,再设计派生类,派生类成员函数应该处理哪些数据。
4. 在主函数中创建对象,创建基类对象还是派生类对象时,通过对象调用哪些成员函数。注意:基类和派生类的构造函数和析构函数的执行顺序。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 写出编程思路和类层次图,体会基类与派生类的关系。
4. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验八 利用虚函数编程
一、实验目的
1.了解多态性的概念和虚函数的作用及使用方法。
2.了解静态关联和动态关联的概念和用法。
3.了解纯虚函数和抽象类的概念和用法。
4.学习使用虚函数的继承实现动态关联。
5.学习理解静态数据成员和静态成员函数的使用。
二、实验内容
1.事先阅读程序,给出其运行结果,上机验证虚函数的作用。
有如下程序:
#include
#include
class Student //定义基类
{public:
Student(int,string,float);
void display(); //声明输出函数
protected: //受保护成员,派生类可访问
int num;
string name;
float score;
};
Student ::Student(int n,string nam,float s)
{num=n;name=nam;score=s;}
void Student::display()
{cout
class Graduate:public Student //声明公有派生类
{public:
Graduate(int,string,float,flaot);
void display(); //声明输出函数
private:
float pay;
};
Graduate::Graduate(int n,string nam,float s,flaot p):Student(n,nam,s),pay(p){}
void Graduate::display()
{cout
void main()
{ Student stud(1001, ״Li ״,87.5);
Graduate grad(2001, ״Wang ״,98.5,563.5);
Student *pt=& stud;
pt->display();
pt=&grad;
pt->display();
}
1)分析结果, 并验证之。
2)利用虚函数,对程序作一点修改, 在 Student 类中声明display 函数时,在其前面加上关键字virtual , 即 virtual void display();,再编译运行,注意分析运行结果。
2.事先编写一个程序,计算正方体、球体和圆柱体的表面积和体积。(提示:声明一个抽象基类 container ,派生类cube 、sphere 和cylinder ,基类中求表面积和体积的成员函数声明为纯虚函数。)
3.定义一个类Student 记录学生计算机课程的成绩,要求使用静态成员变量或静态成员函数计算全班计算机课程的总成绩和平均成绩。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先定义基类,然后定义其派生类。
3. 分析使用那些成员函数,哪些需要用虚函数或者纯虚函数。
4. 在主函数中完成相应的功能,可以是用基类指针来操作。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验五 构造函数与析构函数的编程
一、实验目的
1.进一步加深对类和对象的理解。
2.掌握类的构造函数和析构函数的概念、意义和使用方法。
3.掌握重载构造函数的含义和使用。
4.编写一个较为复杂的类和对象的应用程序。
二、实验内容
1.设计一个程序,定义一个矩形类,包括数据成员和函数成员。要求有构造函数、析构函数,还有一个成员函数area( )用来计算并显示矩形的面积,并编写main 函数进行测试。
Class Rect
{public:
int Area_int();
Rect(int l, int w);
~Rect();
private:
int nLength;
int nWidth;
};
2.重载构造函数。修改上题,一种构造函数用整型变量记录矩形的长和宽,另一种构造函数用double 型记录矩形的长和宽,然后完成成员函数及主函数。
Class Rect
{public:
int Area_int();
double Area_double();
Rect(double l, double w);
Rect(int l, int w);
~Rect();
private:
int nLength;
int nWidth;
double mLength;
double mWidth;
};
3.构造一个类countstr ,要求用构造函数设置计数器count 的初始值为0,成员函数countchar()不返回任何值,它要求用户输入一段文字,按Enter 键后结束计算,用count 记录输入的字符数,成员函数getchar()返回count 的整数值。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先设计类,设计此类的数据成员及成员函数。
3. 注意数据成员的类型,成员函数完成的功能,构造函数与析构函数完成的功能。
4. 在主函数中创建对象,通过对象调用哪些成员函数。注意:创建对象时,构造函数是怎样执行的 程序结束时,释放对象时,析构函数是怎样执行的。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 在实验报告中写出实验内容第1题答案。
4. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验六 利用友元编程
一、实验目的
1.掌握友元函数和友元类的概念、定义和作用。
2.会使用友元编程。
3.进一步学习内存空间动态分配和释放的方法。
二、实验内容
1.有一个向量类Vector ,包括一个点的坐标位置x 和y ,设计两个友元函数,实现两个向量的加法和减法运算。
2.定义一个由y=ax+b确定的直线类Line ,该类的构造函数初始化直线,成员函数Print 显示该直线方程,友元函数SetPoint()求解两条直线的交点。
3. 下列程序是有关友元类的,程序中将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
};
)
{ return x=b.x;}
void main()
{ A a(10);
B b(20);
couta.Set(b);
cout}
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先定义类,包括其数据成员和成员函数。
3. 分析使用的是友元类还是友元函数,通过友元要处理哪些问题。
4. 在主函数中完成相应的功能。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验七 继承与派生的编程
一、实验目的
1.了解继承在面向对象程序设计中的重要作用。
2.理解继承与派生的概念,掌握单继承和多继承的定义方法。
3.熟悉公有派生和私有派生的访问特性。
4.掌握继承中基类和派生类的构造函数定义和调用过程。
5.了解虚基类的作用和用法,会使用虚基类,学习虚基类在解决二义性问题中的作用。
二、实验内容
1.有以下程序,请完成下面的工作:
1)阅读程序,写出运行后的输出结果;
2)然后上机运行,验证结果是否正确;
3)分析程序执行过程,尤其是调用构造函数和析构函数的过程。
#include
class A
{public:
A(){cout
~A(){cout
};
class B:public A
{public:
B(){cout
~B(){cout
};
class C:public B
{public:
C(){cout
~C(){cout
};
void main()
{ C c1;
}
2.定义一个Point 类,派生出Rectangle 类和Circle 类,计算各派生类对象的面积Area( )。编写一
个完整程序进行测试。
3. 定义并描述一个人员类Person ,它派生出学生类Student 和教师类Teacher, 学生类和教师类共同派生出在职读书的教师类Stu_Tech。人员类有姓名、性别、身份证号、出生年月等信息;学生类有学号、成绩等信息;教师类有职务、职称等信息。编写一个完整程序进行测试。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,分析用到几个类,哪些是基类,哪些是派生类,采用何种继承方式。
3. 先设计基类,再设计派生类,派生类成员函数应该处理哪些数据。
4. 在主函数中创建对象,创建基类对象还是派生类对象时,通过对象调用哪些成员函数。注意:基类和派生类的构造函数和析构函数的执行顺序。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 写出编程思路和类层次图,体会基类与派生类的关系。
4. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
实验八 利用虚函数编程
一、实验目的
1.了解多态性的概念和虚函数的作用及使用方法。
2.了解静态关联和动态关联的概念和用法。
3.了解纯虚函数和抽象类的概念和用法。
4.学习使用虚函数的继承实现动态关联。
5.学习理解静态数据成员和静态成员函数的使用。
二、实验内容
1.事先阅读程序,给出其运行结果,上机验证虚函数的作用。
有如下程序:
#include
#include
class Student //定义基类
{public:
Student(int,string,float);
void display(); //声明输出函数
protected: //受保护成员,派生类可访问
int num;
string name;
float score;
};
Student ::Student(int n,string nam,float s)
{num=n;name=nam;score=s;}
void Student::display()
{cout
class Graduate:public Student //声明公有派生类
{public:
Graduate(int,string,float,flaot);
void display(); //声明输出函数
private:
float pay;
};
Graduate::Graduate(int n,string nam,float s,flaot p):Student(n,nam,s),pay(p){}
void Graduate::display()
{cout
void main()
{ Student stud(1001, ״Li ״,87.5);
Graduate grad(2001, ״Wang ״,98.5,563.5);
Student *pt=& stud;
pt->display();
pt=&grad;
pt->display();
}
1)分析结果, 并验证之。
2)利用虚函数,对程序作一点修改, 在 Student 类中声明display 函数时,在其前面加上关键字virtual , 即 virtual void display();,再编译运行,注意分析运行结果。
2.事先编写一个程序,计算正方体、球体和圆柱体的表面积和体积。(提示:声明一个抽象基类 container ,派生类cube 、sphere 和cylinder ,基类中求表面积和体积的成员函数声明为纯虚函数。)
3.定义一个类Student 记录学生计算机课程的成绩,要求使用静态成员变量或静态成员函数计算全班计算机课程的总成绩和平均成绩。
三、实验步骤
1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,先定义基类,然后定义其派生类。
3. 分析使用那些成员函数,哪些需要用虚函数或者纯虚函数。
4. 在主函数中完成相应的功能,可以是用基类指针来操作。
5. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告
1. 写出实验目的。
2. 写出实验内容和程序清单。
3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。