zoukankan      html  css  js  c++  java
  • C++程序设计实验-3

    南京信息工程大学实验报告

    实验名称 C++简单程序设计-3 实验日期 2018-4-2 得分  指导教师  耿学华       计软院   专业计科    年级  2016     班次  (2)  姓名    余佳奇    学号  20161326022    

    一、验证性实验

    1.        类:分为标准类和用户自定义类,实现信息封装的基础,对问题的抽象描述。类是一种用户定义类型。每个类包含数据成员和函数成员。类的实例称为对象。

    2.        对象:class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。

    3.        构造函数:构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化。没有返回值,函数名和类名相同,在对象创建时被自动调用。构造函数能够重载,编译器会根据参数个数和类型来自动选择调用哪一个重载构造函数。当重载不带参数和带默认形参的构造函数时可能存在歧义,编译器无法选择哪一个为最佳匹配的函数。

    4.        复制构造函数:使用已有的对象初始化一个新的对象。复制构造函数的调用:(1)当用类的一个对象去初始化该类的另一个对象时。(2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时。(3)如果函数的返回值是类的对象,函数执行完成返回调用者时。

    5.        析构函数:用来完成对象被删除前的一些清理工作。在对象的生存期即将结束的时刻被自动调用。不接受任何参数。

    二、实验结论

    1.  习题4-11

    定义并实现一个矩形类,有长、宽两个属性,由成员函数计算矩形面积。

    算法思路:首先定义一个矩形类,然后定义构造函数,用于对矩形长和宽的初始化,将矩形长和宽设定为自主输入。

    Code:

     1 #include<iostream>
     2 using namespace std;
     3 
     4 class Rectangle{
     5     private:
     6         double width,length;
     7     public:
     8         Rectangle(double w,double l);    // 用户自定义的构造函数
     9         ~Rectangle();                    // 用户自定义的析构函数,函数名为~类名,没有返回值类型。 
    10                                          // 析构函数用于在对象生存期结束时,被系统自动调用完成对象内存的回收及相关清理工作
    11         void Area(){
    12             cout<<showpoint<<"The rectangle's Area is:"<<width*length<<endl;
    13             return ;
    14         }
    15 }; 
    16 Rectangle::Rectangle(double w, double l) //当成员函数的实现写在类的外部时,要用类名::成员函数名的形式 用形参x0,y0完成数据成员x,y的初始化  
    17 {
    18     cout << "constructor is called." << endl;
    19     width = w;  
    20     length = l;
    21 }
    22 
    23 Rectangle::~Rectangle() 
    24 {
    25     cout << "destructor is called." << endl;
    26 } 
    27 
    28 int main(){
    29     double w,l;
    30     cout<<"Please enter the width of the rectangle: "<<endl;
    31     cin>>w;
    32     cout<<"Please enter the length of the rectangle: "<<endl;
    33     cin>>l;
    34     Rectangle S(w,l);                   // 定义Renctangle类的对象S;
    35     S.Area();                           //调用Area求出矩形的面积
    36     return 0;
    37 }

    运行结果:

    2.  习题4-20

    定义一个复数类Complex,使得下面的代码能够工作。

    算法思路:分别设定两个构造函数用于实现复数3+5i和实数4.5的初始化。定义两个函数分别用于复数相加和显示结果。

    Code:

     1 #include<iostream>
     2 using namespace std;
     3 class Complex{
     4     public: 
     5         Complex(double r,double i){                    // 自定义的默认的构造函数,函数名与类名同,没有返回值类型
     6             cout << "constructor is called." << endl;
     7             real=r;
     8             imaginary=i;
     9         }
    10         Complex(double r){
    11             cout << "constructor is called." << endl;
    12             real=r;
    13             imaginary=0;
    14         }
    15         Complex(Complex &c0){                          // 自定义的复制构造函数
    16             cout << "copy constructor is called." << endl;
    17             real=c0.real;
    18             imaginary=c0.imaginary;
    19         }
    20         ~Complex(){                                    // 自定义的析构函数,函数名为~类名,没有返回值类型。
    21             cout << "destructor is called." << endl;
    22         }
    23         void add(Complex &c0){                         //用于求和的函数
    24             real+=c0.real;
    25             imaginary+=c0.imaginary;
    26         }
    27         void show(){                                   //用于显示结果
    28                 cout<<real<<"+"<<imaginary<<"i"<<endl;
    29         }
    30      private:
    31         double real, imaginary;
    32 };
    33 int main(){
    34     Complex c1(3,5);
    35     Complex c2=4.5;
    36     c1.add(c2);
    37     c1.show();
    38     return 0;
    39 }

    运行结果:

    三、 实验总结与体会

    本次实验专题时类和对象,在验证性实验和编程实验过程中,我理解了类和对象的概念,并掌握了类和对象的定义和使用。同时理解了类的构造函数、析构函数、复制构造函数的用途和编写。总的来说收获很多。

  • 相关阅读:
    indexOf--之美
    uniapp_切换主题
    ueditor调用其中的附件上传功能
    php7 编译安装 apache
    快速排序单循环
    插入排序
    走进svg
    phpstorm内网远程debug
    sass&compass&grunt
    centos7+nginx 1.9.0+php-fpm+phpstorm+xdebug+vmware开发环境搭建
  • 原文地址:https://www.cnblogs.com/yjqi/p/8697516.html
Copyright © 2011-2022 走看看