面向对象程序设计实验报告一
- 格式:doc
- 大小:32.50 KB
- 文档页数:8
一、实验目的1. 理解面向对象编程的基本概念,如类、对象、继承、封装、多态等。
2. 掌握面向对象编程的基本语法和常用操作。
3. 通过实验加深对面向对象编程的理解和应用。
二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C#三、实验内容1. 定义一个简单的类,并创建对象实例。
2. 在类中定义属性和方法,并演示其使用。
3. 使用继承实现类的扩展。
4. 使用封装保护类的内部数据。
5. 使用多态演示不同对象间的动态类型转换。
四、实验步骤1. 定义一个名为“Person”的类,包含以下属性和方法:- 属性:姓名(Name)、年龄(Age)、性别(Gender)- 方法:打印个人信息(PrintInfo)2. 创建“Person”类的对象实例,并演示属性和方法的使用。
3. 定义一个名为“Student”的类,继承自“Person”类,并添加以下属性和方法: - 属性:学号(StudentID)- 方法:打印学生信息(PrintStudentInfo)4. 创建“Student”类的对象实例,并演示属性和方法的使用。
5. 定义一个名为“Employee”的类,继承自“Person”类,并添加以下属性和方法:- 属性:工号(EmployeeID)、职位(Position)- 方法:打印员工信息(PrintEmployeeInfo)6. 创建“Employee”类的对象实例,并演示属性和方法的使用。
7. 定义一个名为“Manager”的类,继承自“Employee”类,并添加以下属性和方法:- 属性:部门(Department)- 方法:打印经理信息(PrintManagerInfo)8. 创建“Manager”类的对象实例,并演示属性和方法的使用。
9. 使用多态演示不同对象间的动态类型转换。
五、实验结果与分析1. 创建“Person”类和对象实例,并演示属性和方法的使用。
面向对象程序设计实验报告实验一类的定义与使用实验目的:熟悉面向对象程序设计的基本概念和语法,掌握类的定义与使用的方法。
实验器材:计算机、编程软件实验过程:1. 类的定义类是面向对象程序设计的基本单元,是一种自定义数据类型。
在本次实验中,我们以学生(Student)类为例进行讲解。
在定义一个类时,一般需要明确以下几个方面的内容:- 类的名称:使用合适的命名规范,如首字母大写的驼峰式命名法;- 类的属性:表示类的特征或状态,用变量来表示;- 类的方法:表示类的行为或功能,用函数来表示。
示例代码:```pythonclass Student:# 定义类的属性name = ""age = 0gender = ""# 定义类的方法def study(self):print( + "正在学习")```2. 类的使用定义好类后,我们可以创建该类的实例,即对象,通过对象来调用类的属性和方法。
示例代码:```python# 创建对象s1 = Student()# 调用对象的属性 = "张三"s1.age = 18s1.gender = "男"# 调用对象的方法s1.study() # 输出:张三正在学习```在类的使用过程中,还可以通过构造函数(__init__方法)来初始化对象的属性,以及通过访问控制修饰符(public、private、protected)来控制属性或方法的访问权限。
实验总结:通过本次实验,我们学习了面向对象程序设计的基本概念和语法,掌握了类的定义与使用的方法。
在程序设计中,合理地定义和使用类,可以提高代码的可读性、可维护性和可重用性。
在今后的学习和实践中,我们应该注重对面向对象的思考和运用,努力提升自己的编程能力。
《面向对象程序设计》实验一、实验内容1.定义接口ITowD,IThreeD。
然后由ITowD派生出圆类;由圆类和IThreeD派生长圆锥类。
结构如下,请实现没有实现的方法,并在Main方法中演示。
interface ITowD{double GetCirCle();//平面图形周长double GetArea();//平面图形面积}interface IThreeD{double GetArea();//立体图形表面积double GetV olume();//体积}class Circle : ITowD{double r;public Circle(double r){this.r = r;}double ITowD.GetCirCle(){//求周长}double ITowD.GetArea(){//求面积}}class Y uanZhui : Circle, IThreeD{double h;public Y uanZhui(double r, double h): base(r){this.h = h;}double IThreeD.GetArea(){//求表面积}double IThreeD.GetV olume(){//求体积}}二、实验目的掌握接口的隐式实现和显示实现。
三、实验环境安装有Visual Studio2005的PC一台。
四、实验数据及结果1·2·五、结论及思考本次试验,学习的是定义接口ITowD,IThreeD。
然后由ITowD派生出圆类;由圆类和IThreeD 派生长圆锥类。
总的来说,类只有在支持接口中的方法时,才能实现隐式实现和显示实现,隐式实现可以解决多继承的二义性,具有多态性。
六、附程序代码1·using System;using System.Collections.Generic;using System.Text;namespace p8_1{class Program{static void Main(string[] args){Circle p1 = new Circle(5);ITowD s1 = p1;Console.WriteLine("圆的周长为:{0}", s1.GetCirCle());Console.WriteLine("圆的面积为:{0}", s1.GetArea());YuanZhui p2 = new YuanZhui(10, 15);IThreeD s2 = p2;ITowD s3 = (Circle)p2;Console.WriteLine("圆锥的周长为:{0}", s3.GetCirCle());Console.WriteLine("圆锥的面积为:{0}", s2.GetArea());Console.WriteLine("圆锥的体积为:{0}", s2.GetVolume());Console.Read();}}public interface ITowD{double GetCirCle();//平面图形周长double GetArea();//平面图形面积}public interface IThreeD{double GetArea();//立体图形表面积double GetVolume();//体积}class Circle : ITowD{public double r;public Circle(double r){this.r = r;}double ITowD.GetCirCle(){return 2 * 3.14 * r; //求周长}double ITowD.GetArea(){return 3.14 * r * r; //求面积}}class YuanZhui : Circle, IThreeD{double h;public YuanZhui(double r, double h): base(r){this.h = h;}double IThreeD.GetArea(){return 3.14 * r * r + 3.14 * r * h;//求表面积}double IThreeD.GetVolume(){return 3.14 * r * r * h / 3; //求体积}}}2·using System;using System.Collections.Generic;using System.Text;namespace p8_2{class Program{static void Main(string[] args){Circle p1 = new Circle(5);ITowD s1 = p1;Console.WriteLine("圆的周长为:{0}",s1.GetCirCle());Console.WriteLine("圆的面积为:{0}",s1.GetArea());YuanZhui p2 = new YuanZhui(10,15);IThreeD s2 = p2;ITowD s3 = p2;Console.WriteLine("圆锥的周长为:{0}", s3.GetCirCle());Console.WriteLine("圆锥的面积为:{0}",s2.GetArea());Console.WriteLine("圆锥的体积为:{0}", s2.GetVolume());Console.Read();}}public interface ITowD{double GetCirCle();//平面图形周长double GetArea();//平面图形面积}public interface IThreeD{double GetArea();//立体图形表面积double GetVolume();//体积}class Circle : ITowD{public double r;public Circle(double r){this.r = r;}public double GetCirCle(){return 2 * 3.14 * r; //求周长}public virtual double GetArea(){return 3.14 * r * r; //求面积}}class YuanZhui : Circle, IThreeD{double h;public YuanZhui(double r, double h): base(r){this.h = h;}public override double GetArea(){return 3.14 * r * r + 3.14 * r * h;//求表面积}public double GetVolume(){return 3.14 * r * r * h / 3; //求体积 }}}。
一、实验目的1. 理解面向对象设计的基本概念和原则;2. 掌握面向对象设计的常用方法和技术;3. 学会运用面向对象设计方法进行软件系统设计和实现;4. 提高软件设计能力和编程能力。
二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容本次实验主要围绕面向对象设计进行,包括以下内容:1. 面向对象设计的基本概念和原则;2. 类的设计与实现;3. 继承与多态的应用;4. 设计模式的应用;5. 软件系统设计与实现。
四、实验步骤1. 面向对象设计的基本概念和原则(1)面向对象设计的基本概念:面向对象设计是一种软件开发方法,它将问题域中的对象作为设计的基本单元,以对象为核心进行系统设计。
(2)面向对象设计的基本原则:封装、继承、多态。
2. 类的设计与实现(1)定义类:根据问题域中的对象,定义相应的类。
(2)实现类:为类添加属性和方法,实现类的功能。
3. 继承与多态的应用(1)继承:通过继承,可以复用已有的类的设计和实现,提高代码的复用性。
(2)多态:多态是面向对象设计的一个重要特性,它可以实现代码的灵活性和扩展性。
4. 设计模式的应用(1)单例模式:确保一个类只有一个实例,并提供一个全局访问点。
(2)工厂模式:用于创建对象,而不直接指定对象的具体类型。
(3)观察者模式:当一个对象的状态发生变化时,其他依赖于该对象的对象会得到通知。
5. 软件系统设计与实现(1)需求分析:分析问题域,确定软件系统的功能和性能要求。
(2)系统设计:根据需求分析,设计软件系统的架构和模块。
(3)编码实现:根据系统设计,实现软件系统的功能。
(4)测试与调试:对软件系统进行测试,确保其功能符合预期。
五、实验结果与分析1. 实验结果本次实验完成了面向对象设计的基本概念、类的设计与实现、继承与多态的应用、设计模式的应用以及软件系统设计与实现等内容。
通过实验,掌握了面向对象设计的方法和技术,提高了软件设计能力和编程能力。
《C++面向对象程序设计》实验内容实验1 C++程序设计初步1.实验目的(1)了解在C++编译系统(Visual C++6.0)上如何编辑、编译、连接和运行一个C++程序。
(2)通过运行简单的C++程序, 初步了解C++源程序的结构和特点。
(3)掌握简单C++程序的编写和调试方法。
(4)掌握重载函数的定义方法。
(5)能正确使用引用型变量。
2.实验内容和步骤(1)在Visual C++环境下编译和运行C++程序①先进入Visual C++6.0环境。
②在自己指定的子目录中建立一个名为test.cpp的新文件。
③从键盘输入以下程序int main(){int a,b;c=a+b;cout>> “a+b=”>>a+b;}选择Build→Compile test.cpp命令, 对此源程序进行编译。
观察和分析编译信息。
⑤根据编译信息指出的错误, 修改程序。
再进行编译, 如果还有错, 再重复此过程, 直到编译不出错为止。
⑥选择Build→Build test.exe命令, 对程序进行连接, 如果不出错, 就会生成可执行程序test.exe。
⑦选择Build→Execute test.exe命令, 执行可执行程序test.exe。
观察屏幕的变化。
在输出窗口应显示程序运行结果。
⑧分析结果是否正确, 如果不正确或认为输出格式不理想, 可以修改程序, 然后重新执行以上④和⑧步骤。
改过后的程序:#include<iostream>using namespace std;int add(int x,int y){int z;z=x+y;return(z);}int main(){int a,b,c;cin>>a>>b;c=add(a,b);cout<<"a+b="<<c<<endl;return 0;}实验2 C++对C的扩充(2)编一个程序, 用来求2个或3个正整数中的最大数。
《面向对象程序设计》实验一实验报告1 实验目的:(1)了解在VC++、C-free中如何编辑、编译、连接和运行一个C++程序;(2)掌握声明类的方法,类和类的成员的概念以及定义对象的方法(3)了解多文件的C++程序结构2 实验任务(1)输入两个整数,将它们按由大到小的顺序输出。
要求使用变量的引用;(2)编写一个程序,将两个字符串连接起来,结果取代第一个字符串;(3)声明Animal 类,数据成员有age,成员函数有SetAge()等。
首先把数据成员声明为公有的,在main()函数中访问,再把它改为私有的,指出在main()函数中访问会出现怎样的情况,如何避免?该程序需要在同一个文件中分别给出类的声明、类的实现、类的演示每部分的代码。
(4)声明日期类,数据成员有year、month、day,成员函数有输出日期、加一天等。
练习使用多文件结构来组织程序。
3 程序清单实验一:#include"iostream"using namespace std;int main(){int i,j;cout<<"input two number"<<endl;cin>>i>>j;swap(i,j);cout<<i<<","<<j<<endl;return 0;}void swap(int &a,int &b){int temp;temp=a;a=b;b=temp;}实验二:#include"iostream"#include"string"using namespace std;int main(){string string1,string2;cout<<"please input two string:";cin>>string1>>string2;string1=string1+string2;cout<<string1<<endl;return 0;}实验三:4 运行结果图1.1 任务一运行结果图2.1任务二运行结果5 总结或感悟(对运行结果所作的分析以及本次调试程序所取得的经验。
《面向对象程序设计》实习报告班级:学号:姓名:指导教师:实习时间:一.实习目的1. 学习怎样启动和退出VB,熟悉VB的工作环境2.掌握基本控件的重要属性、事件;3.熟练掌握在窗体上建立上述控件的操作方法;4.熟练掌握事件过程代码的编写;5.掌握建立基于图形界面的应用程序的过程6. 学习用属性窗口设置对象属性及用代码设置对象属性的方法。
7. 学习如何用对象(窗体和控件)建立界面及在代码编辑器中输入程序代码的基本操作。
8 .基本掌握用VB开发应用程序的一般步骤。
二.程序设计实验1 基本算法练习1.编写程序求“自己学号后3位到500”以内的所有素数及自然数对。
2.编写程序“计算最大公约数和最小公倍数”实验:计算3个数的最大公约数和最小公倍数,并以最小公倍数作为总金额,计算人民币各种票额的张数3.编写程序“歌德巴赫猜想及守形数”4.编写程序“百钱百鸡问题”实验:编写程序解决百钱买百鸡问题:公鸡5元/只,母鸡3元/只,小鸡一元买3只,用100元买100只鸡,问有哪些购买方案?实验2 常用统计练习1.成绩统计实验:利用文本框作为数据的输入和输出,产生数学、语文、英语、计算机等4门课程的成绩2.字符统计实验:随机产生200个“32到自己学号后3位”且小于128的随机数,将其转换成相应字符,形成一段统计字符。
统计字符中各个字母、各数字、空格、其它字符的个数。
实验3 常用排序方法1. 选择法排序实验:随机产生10个“学号后3位到500之间”的数,用选择法进行递增序。
2.冒泡法排序实验: 随机产生10个“50到学号后3位之间”的数,然后用冒泡法按递增的顺序进行排序。
3.二维数组排序实验:随机产生“10到学号后3位之间”的数,形成一个4*5 的二维数组,按升序排列。
4.从有序数组中删除一个元素实验要求:随机产生“1到学号后3位之间”的10个数,然后产生1-10间的随机数,确定删除元素,最后得出删除后的结果实验4 加密解密与数制转换1.数据加密与解密根据产生的后移位数,将输入的字符进行加密和解密。
课程实验报告课程名称:面向对象程序设计实验名称:面向过程的整型栈编程院系:计算机科学与技术专业班级:CS1203学号:U201214884姓名:肖双指导教师:马光志2015 年 1 月 6 日一、需求分析1.题目要求整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。
整型栈类型及其操作函数采用非面向对象的纯C语言定义,请将完成上述操作的所有函数采用纯C语言编程,然后写一个main函数对栈的所有操作函数进行测试。
struct STACK{int *elems; //申请内存用于存放栈的元素int max; //栈能存放的最大元素个数int pos; //栈实际已有元素个数,栈空时pos=0;};void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈int howMany (const STACK *const p); //返回p指向的栈的实际元素个数posSTACK *const push(STACK *const p, int e); //将e入栈,并返回pSTACK *const pop(STACK *const p, int &e); //出栈到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p); //打印p指向的栈void destroySTACK(STACK*const p); //销毁p指向的栈2.需求分析按题目要求定义一个栈,并完成对栈的各种操作。
二、系统设计1.概要设计1)定义一个整型栈2)完成下列函数:void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈int howMany (const STACK *const p); //返回p指向的栈的实际元素个数posSTACK *const push(STACK *const p, int e); //将e入栈,并返回pSTACK *const pop(STACK *const p, int &e); //出栈到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p); //打印p指向的栈void destroySTACK(STACK*const p); //销毁p指向的栈3)创建主函数,测试上述函数。
一、实验目的1. 理解面向对象设计的核心概念,如封装、继承、多态等。
2. 掌握面向对象设计的方法和步骤。
3. 通过实际案例分析,提高面向对象设计的实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 面向对象设计的基本概念2. 类与对象3. 继承与多态4. 实际案例分析四、实验步骤1. 面向对象设计的基本概念(1)定义:面向对象设计(Object-Oriented Design,OOD)是一种以对象为中心的设计方法,通过将现实世界中的实体抽象为对象,以对象及其相互关系来描述系统的结构和行为。
(2)核心概念:a. 封装:将对象的属性(数据)和行为(方法)封装在一起,对外提供接口。
b. 继承:允许一个类继承另一个类的属性和方法,实现代码复用。
c. 多态:允许不同类的对象对同一消息作出响应,实现行为的变化。
2. 类与对象(1)定义:类是具有相同属性和行为的对象的抽象,对象是类的实例。
(2)步骤:a. 定义类:创建一个新的类,定义属性(成员变量)和方法(成员函数)。
b. 创建对象:使用new关键字创建类的实例。
c. 访问对象属性和方法:使用点号(.)操作符访问对象的属性和方法。
3. 继承与多态(1)继承:定义一个新的类(子类)继承自另一个类(父类),子类继承父类的属性和方法。
(2)多态:允许不同类的对象对同一消息作出响应,实现行为的变化。
(3)步骤:a. 定义父类:创建一个父类,定义属性和方法。
b. 定义子类:创建一个子类,继承自父类,并添加新的属性和方法。
c. 实现多态:使用子类对象调用父类方法,实现不同对象对同一消息的不同响应。
4. 实际案例分析(1)案例分析:设计一个简单的图书管理系统。
(2)设计步骤:a. 分析需求:图书管理系统需要管理图书的增删改查等功能。
b. 设计类:设计图书类(Book)、借阅者类(Borrower)和管理员类(Admin)。
课程实验报告课程名称:面向对象程序设计实验名称:面向过程的整型栈编程院系:计算机科学与技术专业班级:CS1203学号:U201214884姓名:肖双指导教师:马光志2015 年 1 月 6 日一、需求分析1.题目要求整型栈是一种先进后出的存储结构,对其进行的操作通常包括判断栈是否为空、向栈顶添加一个整型元素、出栈等。
整型栈类型及其操作函数采用非面向对象的纯C语言定义,请将完成上述操作的所有函数采用纯C语言编程,然后写一个main函数对栈的所有操作函数进行测试。
struct STACK{int *elems; //申请内存用于存放栈的元素int max; //栈能存放的最大元素个数int pos; //栈实际已有元素个数,栈空时pos=0;};void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈int howMany (const STACK *const p); //返回p指向的栈的实际元素个数posSTACK *const push(STACK *const p, int e); //将e入栈,并返回pSTACK *const pop(STACK *const p, int &e); //出栈到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p); //打印p指向的栈void destroySTACK(STACK*const p); //销毁p指向的栈2.需求分析按题目要求定义一个栈,并完成对栈的各种操作。
二、系统设计1.概要设计1)定义一个整型栈2)完成下列函数:void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈int howMany (const STACK *const p); //返回p指向的栈的实际元素个数posSTACK *const push(STACK *const p, int e); //将e入栈,并返回pSTACK *const pop(STACK *const p, int &e); //出栈到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p); //打印p指向的栈void destroySTACK(STACK*const p); //销毁p指向的栈3)创建主函数,测试上述函数。
2.详细设计2.1初始化模块:1)void initSTACK(STACK *const p, int m);功能:初始化p指向的栈:最多m个元素流程:创建一个内存为m的栈,定义一个指向栈m的指针p.入口参数:p,m出口参数:空2) void initSTACK(STACK *const p, const STACK&s);功能:用栈s初始化p指向的栈流程:开辟内存,分别将栈s栈能存放的最大元素个数和栈中元素赋给p指向的栈入口参数:p,s出口参数:空3)STACK *const assign(STACK*const p, const STACK&s);功能:赋s给p指的栈,并返回p流程:分别将栈s栈能存放的最大元素个数和栈中元素赋给p指向的栈,返回p 入口参数:p,s出口参数:p2.2调用栈的成员模块:1)int howMany (const STACK *const p);功能:返回p指向的栈的实际元素个数pos流程:调用栈的实际元素个数pos入口参数:p出口参数:pos2.3入栈、出栈模块:1)STACK *const push(STACK *const p, int e);功能:将e入栈,并返回p流程:栈中元素加1,栈的实际元素个数加1,返回p.入口参数:p,e出口参数:p2) STACK *const pop(STACK *const p, int e);功能:出栈到e,并返回p流程:栈中元素减1,栈的实际元素个数减1,返回p入口参数:p,e出口参数:p2.4打印、销毁模块:1)void print(const STACK*const p);功能:打印p指向的栈流程:按后进先出顺序输出.栈中的元素入口参数:p出口参数:空2) void destroySTACK(STACK*const p);功能:销毁p指向的栈流程:销毁内存,栈的成员max、pos赋0.入口参数:p出口参数:空三、软件开发使用的软件为codebrocks.四、软件测试测试栈的初始化、入栈、出栈、打印栈等函数1、初始化p和s指向的最大元素为10的栈;2、将1、2、3、4、5按先后顺序入s指向的栈,并打印s指向的栈。
3、对s指向的栈执行2次出栈操作,输出出栈的元素,并打印s指向的栈4、输出s指向的栈的实际元素个数5、赋s指向的栈给p指向的栈6、打印p指向的栈7、销毁p和s指向的栈五、特点与不足1.技术特点程序比较简洁易懂,一目了然。
2.不足和改进的建议测试时需要修改main程序,没有人机交互界面,测试不方便。
改进的建议是设计一个人机交互界面,使用户操作起来更方便。
六、过程和体会1.遇到的主要问题和解决方法主要问题:遗忘了关于栈的操作的具体内容,写起来比较生涩解决方法:认真复习了一下栈的操作。
2.课程设计的体会学过的知识要时常拿出来复习,才能真正掌握它们。
做实验时要认真思考,学会灵活运用已掌握的知识,争取举一反三。
七、源码和说明1.文件清单及其功能说明实验1的工程、源文件main.c、可执行程序.exe文件。
2.用户使用说明书打开实验1中的c工程,运行就可看到结果。
3.源代码#include <iostream>#include <stdio.h>#include<stdlib.h>#include<malloc.h>#define INIT_SIZE 5 //初始大小#define INCREASE_SIZE 5 //每次增加大小using namespace std;typedef struct STACK{int *elems;//申请内存用于存放栈的元素int max; //栈能存放的最大元素个数int pos; //栈实际已有元素个数,栈空时pos=0;} STACK;void initSTACK(STACK *const p, int m); //初始化p指向的栈:最多m个元素void initSTACK(STACK *const p, const STACK&s); //用栈s初始化p指向的栈int howMany (const STACK *const p); //返回p指向的栈的实际元素个数pos STACK *const push(STACK *const p, int e); //将e入栈,并返回pSTACK *const pop(STACK *const p, int &e); //出栈到e,并返回pSTACK *const assign(STACK*const p, const STACK&s); //赋s给p指的栈,并返回p void print(const STACK*const p); //打印p指向的栈void destroySTACK(STACK*const p); //销毁p指向的栈int main(){int e;STACK p,s;initSTACK(&p,10);//初始化最大元素个数为10的栈initSTACK(&s,10);push(&s,1); //将1入栈spush(&s,2);push(&s,3);push(&s,4);push(&s,5);print(&s); //打印栈spop(&s,e); //出栈pop(&s,e);print(&s);//assign(&p,s);//print(&p);return 0;}void initSTACK( STACK *const p, int m){STACK s={(int*)malloc(m*sizeof(int)),m,0};*p=s;}void initSTACK(STACK *const p, const STACK&s) {p->elems=(int*)malloc(INIT_SIZE*sizeof(int));p->max=s.max;for(int i=0; i<s.pos; i++){p->elems[i] = s.elems[i];}}int howMany (const STACK *const p){if(p->elems!=NULL)//若栈存在return p->pos;else return 0;}STACK *const push(STACK *const p, int e){if(p->elems!=NULL){int i=p->pos;p->elems[i]=e;p->pos++;return p;}}STACK *const pop(STACK *const p, int &e){if(p->elems!=NULL){e=*(p->elems+p->pos-1);printf("%d\n",e);p->pos--;return p;}}STACK *const assign(STACK*const p, const STACK&s) {if(p->elems!=NULL){p->max=s.max;for(int i=0; i<s.pos; i++){p->elems[i] = s.elems[i];printf("%d\n",p->elems[i]);p->pos++;}}}void print(const STACK*const p){if(p->elems!=NULL){for(int i=0; i<p->pos; i++)cout<<p->elems[i]<<" ";cout<<"\n";}}void destroySTACK(STACK*const p){if(p->elems!=NULL){p->max=p->pos=0;delete p->elems;}}打印源码清单。