实验 2 面向对象编程练习
面向对象程序设计实验(二)2024
面向对象程序设计实验(二)引言概述:本文档旨在介绍面向对象程序设计实验(二)的相关内容。
实验(二)主要涉及面向对象程序设计中的基本概念和实践技巧。
通过本次实验,学生可以进一步巩固对于面向对象程序设计的理解和应用能力。
正文内容:1. 类与对象1.1 定义类和对象的基本概念1.2 区分类和对象的特点和属性1.3 类的成员变量与成员函数的关系1.4 类的继承与派生的用法和作用1.5 类型转换和类型检查的重要性和技巧2. 封装和继承2.1 封装的原则和目的2.2 不同类型的访问控制修饰符的应用与实践2.3 继承的基本概念和实现方法2.4 多态性的应用与实例解析2.5 接口与抽象类的定义和使用3. 异常处理3.1 异常处理的基本原则和作用3.2 异常的分类与处理方式3.3 异常处理的语法和使用方法3.4 异常处理的常见问题和解决策略3.5 异常处理的最佳实践和注意事项4. 面向对象设计的思想和原则4.1 面向对象设计的核心概念和思维方式4.2 SOLID设计原则的介绍和实践应用4.3 设计模式的分类和使用场景4.4 常用设计模式的详细介绍和实例应用4.5 面向对象设计的常见问题和解决策略5. 实践与案例分析5.1 针对实验要求的代码设计与实现5.2 对实验结果的分析和评价5.3 面向对象程序设计思想在实验中的运用和效果5.4 实际项目中的面向对象设计相关问题的解决方法5.5 实验总结和下一步改进计划总结:通过本次面向对象程序设计实验(二),学生能够更好地理解和应用面向对象的基本概念和设计原则,并能够灵活运用相关技巧进行程序开发和问题解决。
实验的实践部分更加加深了对面向对象程序设计的理解和实际应用能力的培养。
这些知识和技能对于学生未来的软件开发和项目管理工作具有重要意义。
实验二面向对象编程实验报告材料
实验二面向对象编程1.实验目的(1)掌握类与对象基本知识;(2)Java中的继承机制及包(package)、接口(interface)等的设计方法;(3)掌握static、this、super等关键字的使用;(4)掌握Java中两种比较器的用法。
2.实验容实验题1 定义一个类Book,包含两个属性:一个是private的String类型的属性title、一个是private 的float类型的属性listPrice,封装这两个属性的四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。
基本要求:(1)设计类Book及类BookManagement,在类BookManagement中输出Book类的对象的两个private 属性;(2)重写父类的toString()方法,实现Book类实例的两个属性的输出。
实验结果:实验过程:首先建立一个Books工程,再建立俩个类Book和Bookmanagement。
在Book类中,有俩个属性:一个是private的String类型的属性title、一个是private的float类型的属性listPrice,使用getter和setter生成四个方法setTitle()和getTitle()、setListPrice( )和geListPrice()。
最后重写Tostring函数。
在Bookmanagement中有主函数,使用JOptionPane.showMessageDialog(null,book)函数使之用对话框形式输出代码如下:package book;public class Book {private String title;private float listPrice;public Book(String title, float listPrice) {super();this.title = title;this.listPrice = listPrice;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public float getListPrice() {return listPrice;}public void setListPrice(float listPrice) {this.listPrice = listPrice;}Overridepublic String toString() {return"title:" + getTitle() + ",Price:" + getListPrice();}}package book;import javax.swing.JOptionPane;public class Bookmanagement{/*public static void output1(Book book){System.out.println("请输出book的title:" + book.getTitle());System.out.println("请输出book的listPrice:" + book.getListPrice());}public static void output2(Book book){System.out.println( book.toString());}*/public static void main(String[] args){Book book = new Book("How to programing in Java",89.9f);JOptionPane.showMessageDialog(null,book);//output1(book);//output2(book);}}实验题2 有两个类:MobileManagement和Mobile,分别描述如图3.4所示两部手机名称及价格,类MobileManagement在包.nwsuaf.jp.p3中,而Mobile在包.nwsuaf.jp.p3.data中。
实验02面向对象编程
实验二面向对象编程1.实验目的(1)掌握类与对象基本知识;(2)Java 中的继承机制及包(package)、接口(interface )等的设计方法;(3)掌握 static 、this 、super 等关键字的使用;(4)掌握 Java 中两种比较器的用法。
2.实验内容实验题 1 定义一个类Book,包含两个属性:一个是 private 的String 类型的属性title 、一个是private的 float 类型的属性listPrice ,封装这两个属性的四个方法setTitle ()和getTitle ()、setListPrice( )和 geListPrice ()。
基本要求:(1)设计类Book 及类 BookManagement,在类 BookManagement中输出 Book 类的对象的两个private 属性;Book 类代码如下图所示:(2)重写父类的toString ()方法,实现Book 类实例的两个属性的输出。
BookManagement类代码如下图所示:代码执行结果如下图示:实验题 2 有两个类: MobileManagement 和 Mobile ,Mobile 类的的两个实例分别描述如图 3.4 所示两部手机名称及价格,类MobileManagement 在包.nwsuaf.jp.p3 中,而Mobile 在包.nwsuaf.jp.p3.data 中。
基本要求:设计Mobile 类与MobileManagement 类,在类MobileManagement 类中实例化Mobile 类的对象使程序能够显示两部手机的价格和数量。
Mobile 类代码如下所示:MobileManagement 类代码如下图所示:代码执行结果显示图如下:实验题 3 有四个类,主类Store 在包.nwsuaf.jp.p4 中,Mobile 、Mp3Player 、Product 在包.nwsuaf.jp.p4.data 中,Mobile 、Mp3Player 是Product 的子类, Product 类为抽象类。
实验二 面向对象编程实验报告
实验二面向对象编程实验报告实验二面向对象编程实验报告实验二面向对象编程1.实验目的(1)掌握类与对象基本知识;(2)java中的承继机制及纸盒(package)、USB(interface)等的设计方法;(3)掌控static、this、super等关键字的采用;(4)掌控java中两种比较器的用法。
2.实验内容实验题1定义一个类book,涵盖两个属性:一个就是private的string类型的属性title、一个就是private的float类型的属性listprice,PCB这两个属性的四个方法settitle()和gettitle()、setlistprice()和gelistprice()。
基本要求:(1)设计类book及类bookmanagement,在类bookmanagement中输入book类的对象的两个private属性;(2)重写父类的tostring()方法,实现book类实例的两个属性的输出。
实验结果:实验过程:首先建立一个books工程,再建立俩个类book和bookmanagement。
在book类中,有俩个属性:一个是private的string类型的属性title、一个是private的float类型的属性listprice,使用getter和setter第1页共13页生成四个方法settitle()和gettitle()、setlistprice()和gelistprice()。
最后重写tostring函数。
在bookmanagement中有主函数,采用joptionpane.showmessagedialog(null,book)函数并使之用对话框形式输出代码如下:packagebook;publicclassbook{}@overridepublicstringtostring(){}return\+gettitle()+\+getlistprice();publicvoidsetlistprice(floatlistprice){} this.listprice=listprice;publicfloatgetlistprice(){}returnlistprice;publicvoidsettitle(stringtitle){}this.title=title;publicstringgettitle(){}returntitle;publicbook(stringtitle,floatlistprice){}super();this.title=title;this.listprice=listprice;privatestringtitle;privatefloatlistprice;packagebook;第2页共13页importjavax.swing.joptionpane;publicclassbookmanagement{}/*publicstaticvoidoutput1(bookbook){system.out.println(\恳请输入book的title:\system.out.println(\请输出book的listprice:\}publicstaticvoidoutput2(bookbook){*/publicstaticvoidmain(string[]args){}bookbook=newbook(\,89.9f);joptionpane.showmessagedialog(null,book);//output1(b ook);//output2(book);}system.out.println(book.tostring());实验题2存有两个类:mobilemanagement和mobile,分别叙述例如图3.4右图两部手机名称及价格,类mobilemanagement在纸盒.nwsuaf.jp.p3中,而mobile在纸盒.nwsuaf.jp.p3.data中。
实验二C++面向对象编程实验-VS2013
实验二C++面向对象编程实验(4学时)一实验目的1.掌握类与对象的编程方法2.掌握继承与派生机制的编程方法3.掌握多态性与虚函数机制的编程方法二实验原理一个c++程序由多个程序单位构成,每一个程序单位作为一个文件,编译系统分别对每个程序文件分别编译,然后连接起来形成可执行程序。
面向对象C++程序中,类的定义通常在.文件中声明,类的实现在.cpp文件中完成。
面向对象技术强调软件的可重用性。
在C++中可重用性是通过“继承”这一机制来实现的。
派生类的继承方式包括公有继承、私有继承、保护继承三种方式。
多态性是面向对象设计中的一个重要特征。
它允许不同的对象以自己特有的不同方式响应相同的消息。
多态性分为静态多态性和动态多态性。
前者是在编译时决定调用哪一个函数,后者是在运行时决定。
静态多态性是通过重载实现的,动态多态性是通过虚函数实现的。
三实验内容1.在Visual Studio 2008中开发C++面向对象程序的基本方法实例在本例中,将创建一个主程序teste win32.cpp,另外创建一个time类,该类中包含两个成员函数和三个成员变量。
在teste win32.cpp中将生成time类的对象。
1.1新建一个Win32控制台应用程序打开“文件”---“新建”---“项目”菜单,创建一个win32控制台应用程序。
项目名称及解决方案名称为teste win32点击确定,在接下来出现的对话框中点击完成。
1.2新建一个time类在texte win32解决方案资源管理器工作区点击鼠标右键,添加一个类。
选择C++类。
类名写为time,点击完成。
1.3在主程序中创建time类的对象并调用。
在time.h中输入以下语句。
在time.cpp中输入以下语句在teste win32.cpp中输入以下语句:接下来,选择“生成”菜单,点击“生成teste win321”,进行程序的编译链接。
之后运行程序,观察结果。
2.以time类为父类,派生出一个子类,并为子类增加新的成员函数。
实训项目四:面向对象编程(二)
实训项目四:面向对象编程练习(二)一、实训目的通过编程和上机实验理解Java 语言是如何体现面向对象编程基本思想,进一步理解类的封装方法,以及如何创建类和对象,掌握OOP 方式进行程序设计的方法,了解类的继承性和多态性的作用。
二、实训要求1. 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。
2. 编写体现类的多态性(成员方法重载、构造方法重载)的程序。
三、实训内容(一)类的继承性练习1.进一步理解继承的含义新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。
新类还可添加新的变量和方法。
这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。
只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。
被继承的类称为父类或超类(superclass),这个新类称为子类。
Java 提供了一个庞大的类库让开发人员继承和使用。
设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。
你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。
所以,通常要对子类进行扩展,即添加新的属性和方法。
这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。
继承的意义就在于此。
2.创建公共类LX3_7_P(1)编写程序文件LX3_7_P.java,源代码如下。
public class LX3_7_P{protected String xm; //具有保护修饰符的成员变量protected int xh;void setdata(String m,int h) //设置数据的方法{xm =m;xh = h;}public void print() //输出数据的方法{System.out.println(xm+", "+xh);}}(2)编译LX3_7_P.java,产生类文件LX3_7_P.class。
实验报告2面向对象编程基础
准备
你为本次实验做了哪些准备:
仔细阅读《C#面向对象与程序设计》教材,熟悉C#语言环境和C#语言如何实现面向对象编程的基本思想.
实验
进度
本次共有3个练习,完成3个。
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
通过课堂上跟随老师学习,课后认真阅读教材,跟同学讨论实验结果,上网查阅C#相关资料,通过周一下午的上机操作和其他时间的上机练习,把不会的问题都弄懂,终于完成了实验报告上的三个实验问题,以下是三个实验问题的具体实现过程。
教师
评语
问题1和问题2:
(问题2是在问题1基础上实现的)
问题3:
成绩
辽宁工程技术大学上机实验报告2
实验名称
面向对象编程基础
院系
姓名
实验
目的
简述本次实验目的:
1.掌握继承的工作机制和意义。
2.掌握派生类的定义方法和实现。
3.掌握base关键字的使用。
4.编写体现类的继承性(成员变量,成员方法,成员变量隐藏)的程序。
5.掌握虚拟方法和重载方法的使用。
6.掌握抽象类和抽象方法的使用。
实验二 Java面向对象编程
public Bank() {
customer = new Customer[10];
numberofCustomer = 0;
}
public void addCustomer(Customer aa) {// addCustomer方法
customer[numberofCustomer++] = aa;
·添加一个公有构造方法:两个形式参数firstName,lastname,用于初始化客户姓名;
·添加getFirstName方法:该方法返回客户的firstName实例变量;
·添加getLastName方法:该方法返回客户的lastName实例变量;
·添加getAccount方法:该方法返回客户的account实例变量;
}
public int getnumberofCustomer() {// getNumberOfCustomers方法
return numberofCustomer;
}
public Customer getCustomer(int number) {// getCustomer方法:根据传进来的数组下标返回指定下标的Customers对象。
·添加一个公有方法:getBalance(),用于返回balance的值,返回值是double型;
·该类文件位于包:com.mybank.domain。
3.创建Customer类:
·位于包:com.mybank.domain中;
·向Customer类添加三个实例变量:firstName,lastName,account(Account对象);
public class Customer {//创建Customer类
实验二:C#面向对象程序基本练习
西华大学实验报告(理工类)开课学院及实验室: 实验时间 : 年 月 日一、实验目的1、理解C#中面向对象的思想。
2、掌握类与对象的关系、方法与属性的使用方法。
3、理解构造函数和析构函数用法。
4、理解并正确区分“类库项目”、“程序集”、“命名空间”三个概念。
5、掌握实例成员与类成员的区别,并掌握其特性和访问规则。
6、掌握继承与多态的实现方法。
7、了解委托与事件概念。
二、实验原理1、面向对象是将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
2、面向对象包括四个基本特征:抽象、封装、继承与派生、多态性。
3、类使用class 关键字来定义,可以包含数据成员、方法、成员以及嵌套的类型成员。
4、方法重载是指一个类有多个方法,名字相同,但方法的参数列表不一样。
5、构造函数是一个与类名相同的函数,它的声明和普通方法类似,不同的是它没有返回值。
6、“命名空间”是一个逻辑上的概念,它的物理载体是“程序集”,具体体现为“DLL ”或“EXE ”文件,在visual studio 中,可通过创建“类库”类型的项目生成程序集。
7、在类的声明中,通过在类名后面加上冒号,再跟上基类名称来表示继承关系。
8、态性的一个重要特征是方法的调用是在运行时确定而不是编译时。
9、委托用于将方法作为参数传递给其他方法。
与委托的签名(由返回类型和参数组成)匹配的任何可访问类或结构中的任何方法都可以分配给该委托。
三、实验设备、仪器及材料Windows 环境计算机、Visual Studio 2012软件四、实验步骤(按照实际操作过程)(一)日期统计程序的面向对象实现1、题目要求:请用面向对象的方法求解此问题:从2008 年7 月8 日到2015 年4 月6 日之间一共有多少天?2、实现步骤:(1)按照实验一当中的方法,创建一个控制台应用程序。
(2)在此项目中添加一个名为CalculateDates的类。
具体方法参见教材56页实现步骤2当中的方法。
实验二 面向对象编程实验报告
实验二面向对象编程实验报告一、实验目的本次实验旨在深入理解和掌握面向对象编程的基本概念和方法,通过实际编程操作,提高运用面向对象思想解决问题的能力,熟悉面向对象编程的开发流程和技巧,培养良好的编程习惯和代码规范。
二、实验环境本次实验使用的编程环境为具体编程环境名称及版本,操作系统为操作系统名称及版本。
三、实验内容(一)问题描述设计一个简单的学生管理系统,能够实现对学生信息(包括姓名、学号、年龄、成绩等)的录入、查询、修改和删除操作。
(二)类的设计1、设计一个`Student` 类,用于表示学生对象。
该类包含以下属性:`name`(姓名)、`student_id`(学号)、`age`(年龄)、`score`(成绩)。
2、为`Student` 类添加构造函数,用于初始化学生对象的属性。
3、为`Student` 类添加`get` 和`set` 方法,用于获取和设置学生对象的属性值。
(三)功能实现1、录入功能:实现用户输入学生信息,并创建`Student` 对象进行存储。
2、查询功能:根据学号或姓名查询学生信息,并输出查询结果。
3、修改功能:根据学号或姓名找到对应的学生对象,修改其属性值。
4、删除功能:根据学号或姓名删除对应的学生对象。
四、实验步骤(一)类的实现```javapublic class Student {private String name;private String studentId;private int age;private double score;public Student(String name, String studentId, int age, double score) {thisname = name;thisstudentId = studentId;thisage = age;thisscore = score;}public String getName(){return name;}public void setName(String name) {thisname = name;}public String getStudentId(){return studentId;}public void setStudentId(String studentId) {thisstudentId = studentId;}public int getAge(){return age;}public void setAge(int age) {thisage = age;}public double getScore(){return score;}public void setScore(double score) {thisscore = score;}}```(二)主函数实现```javaimport javautilArrayList;import javautilScanner;public class StudentManagementSystem {private ArrayList<Student> students;public StudentManagementSystem(){students = new ArrayList<>();}public static void main(String args) {StudentManagementSystem system = new StudentManagementSystem();Scanner scanner = new Scanner(Systemin);while (true) {Systemoutprintln("1、录入学生信息");Systemoutprintln("2、查询学生信息");Systemoutprintln("3、修改学生信息");Systemoutprintln("4、删除学生信息");Systemoutprintln("5、退出系统");int choice = scannernextInt();switch (choice) {case 1:systemaddStudent(scanner);break;case 2:systemqueryStudent(scanner);break;case 3:systemmodifyStudent(scanner);break;case 4:systemdeleteStudent(scanner);break;case 5:Systemoutprintln("感谢使用,再见!");Systemexit(0);default:Systemoutprintln("输入有误,请重新输入!");}}}//录入学生信息public void addStudent(Scanner scanner) {Systemoutprintln("请输入学生姓名:");String name = scannernext();Systemoutprintln("请输入学生学号:");String studentId = scannernext();Systemoutprintln("请输入学生年龄:");int age = scannernextInt();Systemoutprintln("请输入学生成绩:");double score = scannernextDouble();Student student = new Student(name, studentId, age, score);studentsadd(student);Systemoutprintln("学生信息录入成功!");}//查询学生信息public void queryStudent(Scanner scanner) {Systemoutprintln("请输入查询方式(1、按学号查询 2、按姓名查询):");int queryType = scannernextInt();if (queryType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (queryType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("姓名:"+ studentgetName());Systemoutprintln("学号:"+ studentgetStudentId());Systemoutprintln("年龄:"+ studentgetAge());Systemoutprintln("成绩:"+ studentgetScore());return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//修改学生信息public void modifyStudent(Scanner scanner) {Systemoutprintln("请输入修改方式(1、按学号修改 2、按姓名修改):");int modifyType = scannernextInt();if (modifyType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){Systemoutprintln("请输入新姓名:");String newName = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetName(newName);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (modifyType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){Systemoutprintln("请输入新学号:");String newStudentId = scannernext();Systemoutprintln("请输入新年龄:");int newAge = scannernextInt();Systemoutprintln("请输入新成绩:");double newScore = scannernextDouble();studentsetStudentId(newStudentId);studentsetAge(newAge);studentsetScore(newScore);Systemoutprintln("学生信息修改成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}//删除学生信息public void deleteStudent(Scanner scanner) {Systemoutprintln("请输入删除方式(1、按学号删除 2、按姓名删除):");int deleteType = scannernextInt();if (deleteType == 1) {Systemoutprintln("请输入学号:");String studentId = scannernext();for (Student student : students) {if (studentgetStudentId()equals(studentId)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该学号对应的学生信息!");} else if (deleteType == 2) {Systemoutprintln("请输入姓名:");String name = scannernext();for (Student student : students) {if (studentgetName()equals(name)){studentsremove(student);Systemoutprintln("学生信息删除成功!");return;}}Systemoutprintln("未找到该姓名对应的学生信息!");} else {Systemoutprintln("输入有误,请重新输入!");}}}```五、实验结果通过对程序的运行和测试,能够成功实现学生信息的录入、查询、修改和删除功能。
实验二 面向对象编程
实验二面向对象编程一、实验目的:掌握类与对象的定义方法,成员函数的实现与调用方法,领会类实现数据隐藏与封装的原理。
二、实验时间:三、实验地点:四、实验内容:1、编写Circle类,有数据成员Radius,成员函数get_area()用于计算面积,get_perimeter()用于计算周长,disp( )用于显示面积和周长,set_radius()设置半径,get_radius()获取半径。
完善必要的构造函数,构造一个Circle的对象进行测试,对构造函数和析构函数的调用情况进行分析。
2、编写圆柱体类Cylinder,有数据成员Circlr对象和长度Len,成员函数get_vol() 计算体积,get_area()计算表面积。
完善必要的构造函数和拷贝构造函数,构造Cylinder的对象进行测试。
对构造函数,拷贝构造函数和析构函数的调用情况进行分析。
3、设计学生类Stu,含no(学号),name(姓名),deg(成绩)数据成员,成员函数有setdata()用于设置对象,disp()用于输出80—89分段学生数据。
在main()中定义对象数组,用于存储输入学生数据。
五、实验要求:在上机前写出全部源程序;六、实验结果分析:源程序及结果分析:1. Circle类#include <iostream>using namespace std;const float PI = 3.14;class Circle{public:Circle (float r);float set_radius();//设置半径,float get_radius();//获取半径。
float get_area();//用于计算面积,float get_perimeter();//用于计算周长,void disp( );//用于显示面积和周长,~Circle();private:float Radius;};Circle::Circle(float r){Radius = r;cout<<"构造函数调用成功"<<endl;}float Circle::set_radius()//用来设置圆的半径{float r;Radius = r;return Radius;}float Circle::get_radius()//用于获取圆的半径{return Radius;}float Circle::get_perimeter(){return 2*PI*Radius;}float Circle::get_area(){return PI*Radius*Radius;}void Circle::disp(){cout<<"The perimeter is "<<get_perimeter()<<endl;cout<<"The area is "<<get_area()<<endl;}Circle::~Circle(){cout<<"析构函数调用成功"<<endl;}int main(){Circle circle(5.5);cout<<"The Radius is 5.5"<<endl;circle.disp();return 0;}结果分析:2. 圆柱体类Cylinder#include<iostream>using namespace std;const float PI = 3.14;class Cylinder{public:Cylinder(float pCirclr,float pLen);Cylinder(Cylinder &c);float get_vol();float get_area();~Cylinder();private:float Circlr,Len;};Cylinder::Cylinder(float pCirclr,float pLen) {Circlr=pCirclr;Len=pLen;cout<<"构造函数调用成功"<<endl; }Cylinder::Cylinder(Cylinder &c){Circlr=c.Circlr;Len=c.Len;cout<<"拷贝构造函数调用成功"<<endl;}float Cylinder::get_vol(){return PI*Circlr*Circlr*Len;}float Cylinder::get_area(){return 2*PI*Circlr*Circlr+2*PI*Circlr*Len; }Cylinder::~Cylinder(){cout<<"析构函数调用成功"<<endl;}int main(){float pCirclr;float pLen;cout<<"Input r and high:";cin>>pCirclr;cin>>pLen;Cylinder c1(pCirclr,pLen);Cylinder c2(c1);cout<<"The volume is:"<<c2.get_vol()<<endl;cout<<"The area is:"<<c2.get_area()<<endl;return 0;}结果分析:3. Student 类#include<iostream>#include<string.h>using namespace std;class Student{public:Student();//构造函数void setdata(); //输入信息void disp(); //结果输出private:int no;char name[20];float deg;};Student::Student(){}void Student::setdata(){int pno;char pname[20];float pdeg;cin>>pno;cin>>pname;cin>>pdeg;no=pno;strcpy(name,pname);deg=pdeg;}void Student::disp(){if (deg<=89°>=80)cout<<"no:"<<no<<" name:"<<name<<" degree:"<<deg<<endl; }int main(){Student stu[4]; //申请对象数组for(int i=0;i<4;i++) //分别输入每个对象的信息{cout<<"Input number name deg:";stu[i].setdata();}for(int i=0;i<4;i++){stu[i].disp();}return 0;}结果分析:4.复数类#include <iostream>using namespace std;class Complex{public:Complex(); //构造函数void Input(); //输入实部和虚部int get_RealPart(); //获取实部int get_ImaginayPart(); //获取虚部void Disp(); //结果打印输出Complex(Complex &p);~Complex();private:int rp;int ip;};//构造函数Complex::Complex(){}//拷贝函数Complex::Complex(Complex &p){rp = p.rp;ip = p.ip;}//获取实部int Complex::get_RealPart(){return rp;}//获取虚部int Complex::get_ImaginayPart(){return ip;}//输入函数void Complex::Input(){cout<<"请输入复数的实部和虚部:";cin>>rp;cin>>ip;}//输出函数void Complex::Disp(){if(rp!=0&&ip!=0)cout<<"复数为:"<<rp<<"+"<<ip<<"i"<<endl;elsecout<<"复数为:"<<rp<<ip<<"i"<<endl;else if(rp==0&&ip!=0)cout<<"实部为0 复数为:"<<ip<<"i"<<endl;else if(rp!=0&&ip==0)cout<<"虚部为0 复数为:"<<rp<<endl;elsecout<<"实部和虚部都为0 复数为:0"<<endl;}//析构函数Complex::~Complex(){}int main(){Complex c; //申请对象c.Input();c.Disp();return 0;}结果分析:5.矩形类#include <iostream>using namespace std;class Point{public:void Input(); //坐标输入函数float get_x(); //获取横坐标float get_y(); //获取纵坐标private:float x,y;};class Rectangle{public:Rectangle(Point px, Point py); //构造函数void get_RectangleArea(); //计算面积函数void Disp(); //面积结构展示函数private:Point p1, p2;float RectangleArea;};Point::Point(){}//输入坐标void Point::Input(){cout<<"Input Coordinate (x, y): ";cin>>x>>y;}//获取横坐标float Point::get_x(){return x;}//获取纵坐标float Point::get_y(){return y;}//构造函数Rectangle::Rectangle(Point px, Point py){p1 = px;p2 = py;}//计算矩形的面积void Rectangle::get_RectangleArea(){float a,b;a = p1.get_x() - p2.get_x();b = p1.get_y() - p2.get_y();RectangleArea = a*b;}//面积结果打印void Rectangle::Disp(){cout<<"矩形的面积为:"<<RectangleArea<<endl; }int main(){Point p1, p2; //申请p1, p2两个对象p1.Input(); //输入第一个点的坐标p2.Input(); //输入另一个点的坐标Rectangle Area(p1, p2); //申请Area对象Area.get_RectangleArea();Area.Disp(); //计算结果打印return 0;}结果分析:6. 1~36随机选择不同的7个数#include <iostream>#include <cstdlib>#include <ctime>using namespace std;void GetRandNum(int *r) //生成一个在1~36间的整数{*r = rand()%36+1;}int main(){int a[7], n = 7;srand((int)time(0));cout<<"1~36中随机选7个不同数结果如下:"<<endl;while(1){int r = 0, k = 0;GetRandNum(&r);for(int i = 0; i<(7-n); i++){if(a[i] == r)k++; //如果生成的随机数等于以有的数则K加一}if(k==0) //k=0说明原先生成的数和此时生成的数不重复{a[7-n] = r; //将生成的数放入生生成数数组cout<<r<<" ";n--;if(n==0)return 0; //结束}}}结果分析:七、实验心得体会及问题反馈:本实验主要是对面向对象的编程。
实验 2 面向对象编程练习
p.ff2(10,10);
System.out.println("方法调用后x="+p.x+", y="+p.y);
}
}
class Power{
int x=10, y=10;
void ff2(int passX, int passY) {
System.out.println("初始时x="+x+", y="+y);
String s=null;
if (userName!=null)
s="用户名:"+userName;
else
s="用户名不能为空!";
if (password!="12345678")
s=s+"口令无效!";
else
s=s+"口令:********";
System.out.println(s);
}
System.out.println("实例变量y="+StaticDemo.getY()); // 非法,编译时将出错
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
}
}
编译KY3_5.java
分析其运行结果
2.编写一个调用对象方法的程序文件KY3_6.java。
程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。
java上机实验二 初步的面向对象的程序设计练习
String name; String id; float comScore; float score ;
步骤(2):在类Student中添加如下方法,并编写代码实现具体方法的功能:
Student(String name,String id, float comScore, float score){……}
步骤(4)定义一个Application程序类Enroll并添加方法:
public static void main(String args[]){……}
staticboolean isEnroll(Student s){……}
步骤(5)保存文件名为Enroll.java,然后编译、调试和运行程序。
}
运行结果:
主要实验记录及个人小结(包括部分实验源程序、调试结果及实验结果分析等)
实验小结:
本次上机做的是初步的面向对象的程序设计练习,通过两个具体的实例让我基本掌握了类和构造方法的定义,创建类实例的方法以及初步掌握面向对象的编程思想。更加清楚的了解了类、域和方法之间的关系。在做第一道题的时候因为忽略了符号的问题,导致结果总是出错,经过仔细的检查才发现是字符串类型用双引号,字符型用
源程序:
public class TestTriangle {
public static void main(String args[]) {
class Triangle {
private double a,b,c;
Triangle(double a,double b,double c) {
double min;
else System.out.println(a[i].name+" is not enrolled.");
实验二面向对象程序设计
实验二、面向对象程序设计2.1 C#面向对象程序设计( 一)一、实验目的1.理解C#语言是如何体现面向对象编程基本思想。
2.掌握类对象的定义。
3.了解类的封装方法, 以及如何创立类和对象。
4.了解成员变量和成员方法的特性。
5.掌握静态成员的用法。
二、实验要求1. 分析程序, 上机验证结果。
2. 写出程序, 并调试程序, 要给出测试数据和实验结果。
3. 整理上机步骤, 总结经验和体会。
4. 完成实验日志和上交程序。
三、实验内容题目一: 程序分析( 1) 分析下面两个程序, 确定那个程序好, 说明理由。
程序要求: 定义一个圆类, 计算圆的面积和周长。
程序1:public class circle{public static void Main(){double radium, delimeter, square;const double pai = 3.1415926;radium = Convert.ToInt32(Console.ReadLine());delimeter = 2 * pai * radium;square = pai * pai * radium;Console.WriteLine("delimeter={0},square={1}", delimeter, square);Console.ReadLine();}}程序2:public class circle{double delimeter, square;const double pai = 3.1415926;public void calculate(double rad){delimeter = 2 * pai * rad;square = pai * pai * rad;Console.WriteLine("delimeter={0},square={1}",delimeter,square);}public static void Main(){double radium;circle cir = new circle();radium = Convert.ToInt32(Console.ReadLine());cir.calculate(radium);Console.ReadLine();}}( 2) 分析程序, 写出程序的运行结果, 并上机进行验证。
面向对象程序设计(C#)实验2
实验二掌握继承、抽象类、委托与事件处理机制实验目的了解多态的意义了解多态的应用掌握多态的C#实现了解委托和事件的概念了解委托和事件在C#中的实现第一部分上机训练1、在俄罗斯方块程序中,有L形,T形,田形等多种形状,它们是图形的多种形态,可以创建一个名为Shape的基类,而后派生L形,T形等,之后可以在运行时动态绘制各种形状。
1)创建一个名位Teris的控制台应用程序、2)各个类之间的关系如下图所示:3)创建名为Shape的抽象类,包括ShapeType属性和显示信息方法,以及抽象方法绘制:using System;using System.Collections.Generic;using System.Text;namespace Teris{public abstract class Shape{private string shapeType;public string ShapeType{get { return shapeType; }set { shapeType = value; }}public void DisplayInfo(){Console.WriteLine("当前图形类型" + shapeType); }public abstract void Draw();}}4)创建名为ShapeL的派生类,实现基类的绘制using System;using System.Collections.Generic;using System.Text;namespace Teris{public class ShapeL : Shape{public ShapeL(){ShapeType = "L形";}public override void Draw(){Console.WriteLine("|");Console.WriteLine("|");Console.Write("|");Console.WriteLine("__");}}}5)创建名为ShapeT的派生类,实现基类的绘制using System;using System.Collections.Generic;using System.Text;namespace Teris{public class ShapeT : Shape{public ShapeT(){ShapeType = "T形";}public override void Draw(){Console.WriteLine("_______");Console.WriteLine(" |");Console.WriteLine(" |");}}}6)创建名为ShapeZ的派生类,实现基类的绘制using System;using System.Collections.Generic;using System.Text;namespace Teris{public class ShapeZ : Shape{public ShapeZ(){ShapeType = "Z形";}public override void Draw(){Console.WriteLine("----");Console.WriteLine(" |");Console.WriteLine(" |");Console.WriteLine(" ----");}}}7)创建名为ShapeBlock(田字形)的派生类,实现基类的绘制using System;using System.Collections.Generic;using System.Text;namespace Teris{class ShapeBlock : Shape{public ShapeBlock(){ShapeType = "田形";}public override void Draw(){Console.WriteLine(" _________");Console.WriteLine("| | |");Console.WriteLine("| | |");Console.WriteLine(" --------- ");Console.WriteLine("| | |");Console.WriteLine("| | |");Console.WriteLine(" --------- ");}}}8)在Program.cs中添加如下代码,实现随机生成图形:using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace Teris{enum ShapeType{Block = 0,L,T,Z}class Program{static void Main(string[] args){Random rnd = new Random();while (true){Shape shape = null;ShapeType type = (ShapeType)rnd.Next(4);switch (type){case ShapeType.Block:shape = new ShapeBlock();break;case ShapeType.L:shape = new ShapeL();break;case ShapeType.T:shape = new ShapeT();break;case ShapeType.Z:shape = new ShapeZ();break;}if (shape != null){shape.DisplayInfo();shape.Draw();Console.WriteLine("----------------------");Thread.Sleep(1000);//防止刷新太快,让系统停止1秒}}}}}}注意Random类和Thread类的使用2、编写一个程序用来模拟考试流程,有一个老师类Teacher,学生类Student,老师引发考试事件,学生进行考试,学生答完题发出完成答题事件,老师收卷。
面向对象实验2
《面向对象程序设计》实验二实验报告班级学号姓名1 实验目的(1)了解在VC++、C-free中如何编辑、编译、连接和运行一个C++程序;(2)掌握声明类的方法,类和类的成员的概念以及定义对象的方法;(3)了解多文件的C++程序结构。
2 实验任务(1)输入3个整数,将它们按由大到小的顺序输出。
要求使用变量的引用。
(2)P.141-11。
要求按照第10题的形式完成Worker类的程序设计。
即setXX函数完成设置成员变量数据,getXX函数用于访问成员变量数据。
本题要求有个无参的构造函数,用于完成初始化成员变量数据。
(3)声明日期类,数据成员有year、month、day,成员函数有无参构造函数、输入日期、输出日期、加一天等。
练习使用多文件结构来组织程序,输出效果图如下。
注意:对于“加一天”的函数需要考虑多方面的因素,考虑到每年的最后一天加一天就是下一年的第一天;如果是闰年,那么2月最后一天是29号,而平年的2月最后一天为28号,以及大月小月的区别等。
3 程序清单任务(1)#include <iostream>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */void result(int a,int b,int c){int temp;if(a<b){temp=a;a=b;b=temp;}if(a<c){temp=a;a=c;c=temp;}if(b<c){temp=b;b=c;c=temp;}cout<<a<<">"<<b<<">"<<c<<endl;}int main(int argc, char** argv) {int a,b,c;cin>>a>>b>>c;result(a,b,c);return 0;}任务(2)/*main.cpp*/#include <iostream>#include "Worker.h"using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {Worker w;w.setname("张三");w.setage(20);w.setDept("机电系");cout<<"姓名:"<<w.getname()<<endl;cout<<"年龄:"<<w.getage()<<endl;cout<<"部门:"<<w.getDept()<<endl;w.setsalary();w.getsalary();return 0;}/*Worker.h*/#ifndef WORKER_H#define WORKER_H#include<string>using namespace std;class Worker{private:string name;int age;string Dept;double salary,Wage,Subsidy,Rent,WaterFee,ElecFee;public:Worker();void setname(string n);string getname();void setage(int a);int getage();void setDept(string d);string getDept();void setsalary();double getsalary();protected:};#endif/* Worker.cpp*/#include "Worker.h"#include <iostream>using namespace std; Worker::Worker(){}void Worker::setname(string n) {name=n;}string Worker::getname(){return name;}void Worker::setage(int a) {age=a;}int Worker::getage(){return age;}void Worker::setDept(string d) {Dept=d;}string Worker::getDept(){return Dept;}void Worker::setsalary(){cout<<"基本工资:"; cin>> Wage;cout<<"岗位津贴:"; cin>> Subsidy;cout<<"房租:"; cin>> Rent;cout<<"水费:"; cin>> WaterFee;cout<<"电费:"; cin>> ElecFee;}double Worker::getsalary(){cout<<"工资为:"<<Wage+Subsidy-Rent-WaterFee-ElecFee;}任务(3)/*main.cpp*/#include <iostream>#include "Date.h"using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {Date d1,d2,d3,d4;d1.output();d2.input();d2.output();d3.input();d3.outputadd();d4.input();d4.outputadd();return 0;}/* Date .h*/#ifndef DATE_H#define DATE_Hclass Date{private:int year,month,day;public:Date();Date(Date &);void input();void output();void outputadd();int leapyear(int year);int getmonthday(int month);protected:};#endif/* Date .cpp*/#include "Date.h"#include<iostream>using namespace std;Date::Date(){year=1999;month=2;day=28;}void Date::input(){cout<<"请输入正确日期:";cin>>year>>month>>day;}int Date::leapyear(int year){if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) return true;elsereturn false;}int Date::getmonthday(int month){int month_day[13]={0,31,28,31,30, 31, 30, 31, 31, 30, 31, 30, 31 };if(month==2&&leapyear(year))month_day[month]+=1;return month_day[month];}Date::Date(Date &d){year = d.year;month = d.month;day = d.day;}void Date::outputadd(){Date d(*this);d.day = day+1;while (d.day> getmonthday(d.month)){d.day -= getmonthday(d.month);d.month ++;if (d.month > 12){d.year ++;d.month = 1;}}cout<<"增加一天日期为:"<<d.year<<"-"<<d.month<<"-"<<d.day<<endl;}void Date::output(){month=month>12?12:month;day=day>getmonthday(month)?getmonthday(month):day;cout<<"日期为:"<<year<<"-"<<month<<"-"<<day<<endl;}4 运行结果任务(1)任务(2)任务(3)5 总结或感悟通过这次面向对象的设计,使我对C++的学习有了更深入的认识,并且复习了自己上学期学习到的知识。
C++试验2_类和对象程序设计
实验2 类和对象程序设计【实验目的】运用C++实现类和对象的程序编写、调试与运行【实验内容】1、例程调试练习例1 类和对象的简单实例#include <iostream.h>#include <math.h>class complex{private:double real; //复数的实部double imag; //复数的虚部public:void init(double r,double i) //给real和imag赋初值{real=r;imag=i;}double realcomplex() //求复数的实部值{return real;}double imagcomplex() //求复数的虚部值{return imag;}double abscomplex() //求复数的绝对值{double t;t=real*real+imag*imag;return sqrt(t);}};int main(){complex A;A.init(1.1,2.2);cout<<"real of complex A="<<A.realcomplex( )<<endl;cout<<"imag of complex A="<<A.imagcomplex( )<<endl;cout<<"abs of complex A="<<A.abscomplex( )<<endl;A.real=5.5;A.imag=8.8;;return 0;}例2 构造函数与析构函数#include <iostream.h>#include <math.h>class complex{private:double real;double imag;public:complex(double r=0.0,double i=0.0); //含有缺省参数的构造函数 ~complex( );double abscomplex( );};complex::complex(double r,double i){cout<<"constructing "<<endl;real=r;imag=i;}~complex( ){cout<<"destructing "<<endl;}double complex::abscomplex( ){double t;t=real*real+imag*imag;return sqrt(t);}int main( ){complex A(1.1,2.2);cout<<"abs of complex A="<<A.abscomplex( )<<endl;return 0;}例3 对象数组#include<iostream.h>class exam{private:int x;public:exam(int n){x=n;}int get_x(){return x;}};int main(){exam ob[4]={11,22,33,44}; //通过初始值表给对象数组赋值for(int i=0;i<4;i++) cout<<ob[i].get_x( )<<' ';cout<<endl;return 0;}例4 对象指针class exe{private:int x;public:void set_a(int a){x=a;}void show_a(){cout<<x<<endl;}};main(){exe ob,*p //声明类exe的对象ob和类exe的对象指针p ob.set_a(2);ob.show_a( );p=&ob; //将p指针指向对象obp->show_a( );return 0;}例5 对象作为函数参数#include<iostream.h>class tr{private:int i;public:tr(int n){i=n;void set_i(int n){i=n;}int get_i(){return i;}};void sqr_it(tr *ob){cout<<"Copy Of Obj has i value Of"<<ob->get_i();ob->set_i(ob->get_i( )*ob->get_i( ));cout<<endl;}int main(){tr obj(10);sqr_it(&obj);cout<<"Now,Obj.i in main() has been changed:";cout<<obj.get_i( )<<endl;return 0;}例6 友元#include<iostream.h>#include<string.h>class girl;class boy{private:char *name;int age;public:boy(char*n,int d){name=new char[strlen(n)+1];strcpy(name,n);age=d;}void disp(girl &); //声明disp()为类boy的成员函数 ~boy(){delete name;}class girl{private:char *name;int age;public:girl(char *n,int d){name=new char[strlen(n)+1];strcpy(name,n);age=d}friend void boy::disp(girl &); //声明类boy的成员函数disp()为类girl 的友元函数~girl(){delete name;}};void boy::disp(girl &x) //定义友元函数disp(){cout<<"boy \'s name is:"<<name<<age:"<<age<<"\n"; //访问本类对象成员cout<<"girl\'s name is:"<<<<"age:"<<x.age<<endl; //访问友类对象成员}void main(){boy b("chen hao",25);girl e("zhang wei",18);b.disp(e);return;}例7 类对象成员#include<iostream.h>#include<string.h>class string{ //声明类stringprivate:char *str;public:string(char *s) //定义类string的构造函数{str=new char[strlen(s)+1];strcpy(str,s);void print(){cout<<str<<endl;}~string(){delete str;}};class girl //声明类girl{private:string name; //name为类girl的对象成员int age;public:girl(char *st,int ag):name(st) //定义类girl的构造函数{age=ag;}void print(){name.print(); //调用类string的对象name的成员函数cout<<"age:"<<age<<endl;}~girl(){}};int main( ){girl obj{"Chenhao",25};obj.print();return 0;}2、编程练习练习1(必作题)试定义一个字符串类string,使其至少具有内容(contents)和长度(1ength)两个数据成员,并具有显示字符串、求字符串长度、给原字符串后添加一个字符串等功能,要求程序必须完成,即必须包含主函数。
实验二.面向对象编程(Partone)
实验⼆.⾯向对象编程(Partone)实验2 ⾯向对象编程(Part one)实验⽬的掌握Java程序⾯向对象编程的基本架构,会运⽤⾯向对象的思想编写Java程序。
注:要求使⽤在命令⾏完成。
实验题1阅读如下程序,完成思考题。
class CCircle{ double pi;double radius;double getRadius(){ return radius;}void setCircle(double r, double p){ pi=p;radius=r;}}public class Ex2_1{ public static void main(String args[]){ CCircle cir1=new CCircle();cir1.setCircle(2.0,3.1416);System.out.println("radius="+cir1.getRadius()); }}[基本要求] 运⾏程序并观察运⾏结果。
[思考问题] 试述程序中主要语句的作⽤。
实验题2设计⼀个⽤来描述汽车的类Car,使⽤类的⾮静态成员变量来表⽰汽车的车主姓名name、当前的速率speed: 1.创建构造函数为三个成员变量赋初值。
2.使⽤类的⾮静态成员⽅法来表⽰改车主姓名changeName操作, 并通过该⽅法显⽰修改后的车主名称。
3.使⽤类的⾮静态成员⽅法来表⽰改变汽车的速率changSpeed操作,并通过该⽅法显⽰修改后的车速。
4.使⽤类的⾮静态成员⽅法来表⽰停车stop操作,并通过该⽅法显⽰停车后的车速。
5.创建⼀个Car类的对象,初始状态时,车主名称是⾃⼰的名字,speed=0。
6.分别调⽤这三个⽅法,更改车名为朋友的名字,车速为20,停车车速为0,并且得到如下的结果:实验题3定义⼀个类MyProgram,包含两个属性:⼀个是private 的整型属性data、⼀个是private的String类型的属性str,封装这两个属性的四个⽅法setData()和getData()、setStr( )和getStr ();将这两个属性转变为字符串的⽅法是toStr()。
面向对象编程练习
实验 3 面向对象编程练习
一、实验目的
1.掌握如何定义类以及类的成员变量、类的方法。
2.掌握对象的创建、对象属性的引用和方法的调用。
3.理解成员的访问权限。
4.掌握如何定义和使用构造方法。
5.掌握this的使用。
6.掌握关键字static、final的使用方法。
二、实验要求
1.编写一个含有简单类定义的Java应用程序。
2.编写一个含有多个构造方法的类的Java应用程序。
三、实验内容
1.创建一个对象
2.利用构造方法对成员变量初始化
3.带参数的构造方法
相关内容见ppt构造方法4. 打印输出默认值
5.查看打印输出结果
比较形参和成员变量x,y 6.this的用法
可以简化构造函数的调用7. 打印输出, 体会过程
8.静态方法
编译以下语句,找出错误;并回答为什么?
答:没有错误9.实例方法和静态方法
以上语句编译是否有错,并回答为什么?仔细结合ppt 关键字static体会里面的内容答:编译错误。
原因:没有对“z”进行定义,变量在使用前要定义。
实验2—C++ 面向对象知识要点练习(学生)
(5)掌握C++中自定义类模板的写法。
主要实验仪器设备
设备及软件名称
规格
数量
工作状态
出现问题
备注
实验内容
1.利用多态机制写一个Animal类、Dog类和Cat类,每个类中都包含三个公开的成员函数分别为三个类动物在逻辑上所共有的行为,如eat(),sleep(),jump()等。可随意定义,原则是合理。并按照多态机制分别以父类身份调用上述函数,分别依对象的真实类型进行实际的调用,并给出有标志性的输出结果。
实验步骤
实
验
总
结
实验1实验报告
实验项目名称
C++面向对象知识要点练习
实验时间
年月日(星期)第周节
实验地点
(房间号)
实验台
(机器号)
学号
实验成绩
姓名
班级
教师评语
指导教师(签章):
实验目的
(1)理解面向对象的思想,掌握C++中关于抽象、封装、继承与多态的概念与实现机制。
(2)掌握抽象类的概念。
(3)掌握C++中简单的文件操作。
2.写一个简单文件操作的程序,要求把一个整型变量,一个结构变量以及一个类的对象用文件对象的write方法分别写入到一个文件(如命名为data.dat的文件)中,并使用文件对象的read方法分别在读到内存对应的变量中来。在必要的地方加入异常处理。
3.写一个基于自定义模板的取数组最大元素的程序,要求此程序同时适用于int型、double型、char型数组。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public class KY3_12 {
public static void main(String[] args) {
new RunDemo();
new RunDemo("刘新宇");
new RunDemo(null,"邵丽萍");
new RunDemo("张驰","12345678");
}
}
构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。
编写构造方法RunDemo的重载程序文件KY3_11,源代码如下。
class RunDemo {
private String userName, password;
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class KY3_4 {
public static void main(String[] args) {
System.out.println("静态变量x="+StaticDemo.getX());
{
xm =m;
xh = h;
}
public void print() //输出数据的方法
{
System.out.println(xm+", "+xh);
}
}
(2)编译KY3_7_P.java,产生类文件KY3_7_P.class。
3.创建继承的类
(1)程序功能:通过KY3_7_P类产生子类KY3_8,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的print方法,同时可以看出子类也具有该方法。
四、思考题
1.说明使用变量之前是不是都要先声明变量。说明使用变量之前是不是都要先赋值,为什么?
2.说明什么是构造方法。
3.说明程序中有多个类时如何确定源程序文件的名称。
4.说明类的继承和多态有什么作用,在使用上应该注意什么问题。
}
}
编译KY3_5.java
分析其运行结果
2.编写一个调用对象方法的程序文件KY3_6.java。
程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。
KY3_6.java程序源代码如下。
class KY3_6 {
public static void main(String[] args) {
3.编写一个显示当前日期和时间的程序。
4.编写不同成员变量修饰方法的程序。
5.编写不同成员方法修饰方法的程序。
6.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。
7.编写体现类的多态性(成员方法重载、构造方法重载)的程序。
三、实验内容
(
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。常用的修饰符如下。Public,private,protected,package,static,final,transient,volatile
System.out.println("实例变量y="+StaticDemo.getY()); // 非法,编译时将出错
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
a.setX(1);
a.setY(2);
b.setX(3);
思考:方法的参数传递有哪些方式?区别时什么?
(
1.进一步理解继承的含义
新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。
当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。
2.创建公共类KY3_7_P
(1)编写程序文件KY3_7_P.java,源代码如下。
public class KY3_7_P
{
protected String xm; //具有保护修饰符的成员变量
protected int xh;
void setdata(String m,int h) //设置数据的方法
Power p=new Power();
p.ff2(10,10);
System.out.println("方法调用后x="+p.x+", y="+p.y);
}
}
class Power{
int x=10, y=10;
void ff2(int passX, int passY) {
System.out.println("初始时x="+x+", y="+y);
x=passX*passX;
y=passY*passY;
System.out.println("方法调用中x="+x+", y="+y);
}
}
编译KY3_6.java
以上两个实验例子仅仅是为了说明Java编程中参数传递时要注意的问题,在实际编程中是不可取的,因为完全可以采用其它更好的方法来实现参数的传递。例如,前面还使用过传递对象的方式。
56
RunDemo() {
System.out.println("全部为空!");
}
RunDemo(String name) {
userName=name;
}
RunDemo(String name, String pwd) {
this(name);
password=pwd;
check();
}
void check() {
(2)编写KY3_8.java程序,源代码如下。
class KY3_8 extends KY3_7_P
{
protected String xy;
protected String xi;
public static void main(String args[])
{
KY3_7_P p1 = new KY3_7_P();
编译并运行程序
三个构造方法,其中第一个无参构造方法RunDemo()的实际作用是对成员变量赋缺省初值,由于userName和password都是String类,所以它们的缺省初值为null。第二个构造方法RunDemo(String)只有一个参数,用来对成员变量userName赋初值。第三个构造方法RunDemo(String, String)有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password赋值;最后调用check方法来检查userName和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。
int x=10, y=10;
ff1(x, y);
System.out.println("x="+x+", y="+y);
}
static void ff1(int passX, int passY) {
passX=passX*passX;
passY=passY*passY;
System.out.println("passX="+passX+", passY="+passY);
Java提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。
1.程序功能:通过两个类StaticDemo、KY3_4 说明静态变量/方法与实例变量/方法的区别。
2.编写类文件KY3_4.java,程序源代码如下。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
}
}
3.对上面的源程序进行编译,排错并运行
(
1.编写一个传值调用的程序文件KY3_5.java。
程序功能:程序首先给整型变量x和y赋一个初值10,然后使用传值调用方式调用方法ff1对x和y做乘方及输出x和y的乘方值,最后再输出x和y的乘方值。
程序源代码如下。
class KY3_5 {
public static void main(String[] args) {
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());