zoukankan      html  css  js  c++  java
  • 实验 3:类和对象

    一、实验目的


    • 理解面向对象程序设计中的类、对象的概念。
    • 理解面向对象程序设计的特性中,「抽象性」和「封装性」的体现和意义。
    • 掌握类的定义和实现。
    • 掌握对象的定义和使用。
    • 理解类的构造函数、析构函数、复制构造函数的用途和编写。
    • 了解使用 UML 类图描述类的方法。

    二、实验准备


    实验前,请围绕以下内容复习/学习指定内容

    • 面向对象程序设计的基本概念、特性
      复习教材 1.2 节、4.1 节,结合课件相关部分,进一步加深对以下内容的理解:
      • 面向对象程序中,「对象」、「类」、「消息」的概念
      • 抽象性、封装性、多态性
    • 内联函数、带默认形参值的函数、函数重载
      复习教材 3.2 节~3.4 节,巩固上述内容。
    • C++中类的定义和实现的语法形式、对象的定义和使用方法
      结合教材 4.2 节和课件相关部分快速浏览、复习。
    • C++中类的成员函数中,构造函数、复制构造函数、析构函数的作用和语法形式
      结合教材 4.3 节和课件相关部分浏览、学习。

    三、实验内容


    • 验证性实验
      • 依次运行表 1 中的 5 个*.cpp 源文件(已随本文档一起打包放在课程公邮→实验文
        件夹),结合源文件内注释、程序运行结果以及 UML 类图,理解和掌握类和对象定义和使
        用的方法,以及其中关于构造函数、复制构造函数、析构函数的知识。
        其中:
      • 教材 P114「例 4-3 游泳池改造预算,Circle 类」
        运行示例,结合示例理解和体会面向对象编程与结构化编程中思维方式的不同。
    示例文件名 示例主要说明的内容 UML 类图
    test_point0.cpp 类的定义和使用
    test_point1.cpp 类的定义和使用
    用户自定义默认构造函数和析构函数
    test_point2.cpp 类的定义和使用
    用户自定义默认构造函数、带参数的构造函数、析构函数
    test_point3.cpp 类的定义和使用
    用户自定义默认构造函数、带参数的构造函数、复制构造函数、析构函数
    test_point4.cpp 类的定义和使用
    在 test_point3.cpp 基础上的改进,展示构造函数在书写形式上的另一种写法
    同上
    • 编程实验
      用 c++编程实现以下内容:
      • 习题 4-11(教材 P144)
        要求:设计矩形类时,成员函数除了包括计算矩形面积的成员函数之外,还包括自定义
        构造函数、复制构造函数、析构函数。
      • 习题 4-20 (教材 P145)
        基于题目要求,给出 Complex 类的 UML 类图参考如下:

        图 1 Complex 类图

    四、实验结论


    • 验证性实验部分
      总结你对类、对象、构造函数、复制构造函数、析构函数的认识、理解和思考。
      • :包含某些数据组成的包,由private、public实现其封装的特性,由protected实现其继承的特性。e.g.
    Class student{
        private: int id;……
        public: ……
        protected: ……
    }
    
    + **对象**:是一个类的实例,具有属性和方法。e.g.`ClassName *a=new ClassName `
    + **构造函数**:一个类里用于建立对象的子程序,函数名称一般与所属类名称相同。可以由不同的函数定义进行重载。e.g.`ClassName(type1 c0)`
    + **复制构造函数**:建立一个已知对象副本的程序。e.g.`ClassName(const ClassName &c0)`
    + **析构函数**:释放对象生命时调用的函数。e.g.`~ClassName()`
    
    • 编程实验部分
      • 习题 4-11
    #include<bits/stdc++.h>
    using namespace std;
    class Rectangle{
    	private:
    		double height,length;
    	public:
    		Rectangle(double h=1,double l=1){
    			cout<<"自定义构造函数被调用"<<endl; 
    			height=h;
    			length=l;
    		}
    		Rectangle(const Rectangle &c0){
    			cout<<"复制构造函数被调用"<<endl;
    			height=c0.height;
    			length=c0.length;
    		}
    		void CalArea(){
    			cout<<showpoint<<"The rectangle's Area is:"<<height*length<<endl;
    			return ;
    		}
    		void Print(){
    			cout<<"The rectangle's height is:"<<height<<" length is:"<<length<<endl; 
    			return ;
    		}
    		~Rectangle(){
    			cout<<"析构函数被调用"<<endl; 
    		} 
    }; 
    int main(){
    	srand((unsigned)time(NULL)); 
    	Rectangle b(10,10);
    	Rectangle a=b;
    	cout<<"Rectangle b:";
    	b.Print();
    	cout<<"Rectangle a:";
    	a.Print(); 
    	Rectangle *c=new Rectangle(rand()%100,rand()%100);
    	c->Print();
    	c->CalArea();
    	cout<<"释放c:";
    	delete c;
    	return 0;
    }
    

    + 习题 4-20
    
    #include<bits/stdc++.h>
    using namespace std;
    class Complex{
    	private:
    		double real, imaginary;
    	public: 
    		Complex(double r0,double i0){
    			real=r0;
    			imaginary=i0;
    		}
    		Complex(double r0){
    			real=r0;
    			imaginary=0;
    		}
    		Complex(const Complex &c0){
    			real=c0.real;
    			imaginary=c0.imaginary;
    		}
    		void add(const Complex &c0){
    			real+=c0.real;
    			imaginary+=c0.imaginary;
    		}
    		void show(){
    			if(imaginary>=0)cout<<real<<"+"<<imaginary<<"i"<<endl;
    			else cout<<real<<imaginary<<"i"<<endl;
    		}
    };
    int main(){
    	Complex c1(3,5);
    	Complex c2=4.5;
    	c1.add(c2);
    	c1.show();
    	return 0;
    }
    

    五、实验总结与体会


    • 由于有Java语言学习的基础,对于C++中类的学习便触类旁通,使用方法基本完全相同。
    • 最近在帮国外小伙伴写(划掉)修改C++作业,他们的作业是这样的:
      ,同样的学习基础,私以为他们的作业更难一些,也更容易快速学会类一些。
    • 博客园内markdown语法对表格的支持并不好,修改了CSS才得以实现文档中的效果。
  • 相关阅读:
    Android Studio 开发利器【经常使用插件】
    Eclipse改动Project的文件夹位置
    《信息检索》第8讲 毕业论文学习指导(资源及预习材料)
    Android:使用SparseArray取代HashMap优化性能
    JavaScript初探之——图片移动
    C#趣味程序---九九乘法表
    CoreData使用方法三: NSPredicate在CoreData中的使用
    Eclipse中使用正则屏蔽Logcat中的某些Tag
    给一个int型整数,如何将这个整数的奇偶位互换
    30款基本UX工具
  • 原文地址:https://www.cnblogs.com/shy-/p/8692464.html
Copyright © 2011-2022 走看看