首页 > 编程语言 >广州大学面向对象程序设计实验一

广州大学面向对象程序设计实验一

时间:2024-11-18 18:43:15浏览次数:3  
标签:函数 temp 广州大学 imagenary 面向对象 int 程序设计 成绩 cout

广州大学学生实验报告

开课实验室:计算机科学与工程实验(电子楼418A)   2023年3月23

学院

计算机科学与网络工程学院

年级、专业、班

姓名

学号

实验课程

面向对象程序设计

成绩

实验项目

实验一  类与对象

指导老师

一、实验目的

  1. 掌握类和对象的概念、定义和使用方法。
  2. 掌握不同特性对象成员的访问方法,以及this指针的概念和使用方法。
  3. 掌握构造函数和析构函数的使用方法。
  4. 掌握友员的使用方法。

二、使用仪器、器材

微机一台

操作系统:WinXP

编程软件:C++

三、实验内容及原理

(1) 定义一个score类,其中包括私有数据成员和公有成员函数,即

num          学号

Math           高等数学成绩

English           英语成绩

Programming    程序设计成绩

inscore()        输入学号和各科成绩,并且计算平均成绩

showscore(时)   输出学号和各科成绩

使用score类,输入某班n(事先不能确定)个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。

#include<iostream>

using namespace std;

class score

{

    score* b;//定义成绩数组,记录全班的成绩

    long int num;//定义学号数据对象

    double Math, English, Programing,Average;//定义各科成绩和平均分

public:

   

    void inscore(score&a,int n)//定义输入成绩的成员函数

    {

       

        b = new score[n];//使用动态对象数组来描述每个学生的数据

        for (int i = 0; i < n; i++)

        {

             cout << "请输入第" << i+1 << "个学生的学号:" << endl;

             cin >> b[i].num;

             cout << "请输入第" << i+1 << "个学生的高数成绩:" << endl;

             cin >> b[i].Math;

             cout << "请输入第" << i+1 << "个学生的英语成绩:" << endl;

             cin >> b[i].English;

             cout << "请输入第" << i+1 << "个学生的程序设计成绩:" << endl;

             cin >> b[i].Programing;

             b[i].Average = (b[i].Math + b[i].English + b[i].Programing) / 3;

        }

    }

    void showscore(score&a,int n)//定义输出成绩的成员函数

    {

        cout << "学号\t" << "高数\t" << "英语\t" << "程序设计\t" << "平均" << endl;

        for (int i = 0; i < n; i++)

        {

             cout << b[i].num << "\t" << b[i].Math << "\t" << b[i].English << "\t" << b[i].Programing << "\t"<<b[i].Average<<endl;

        }

    }

};

int main()

{

    score a;

    a.inscore( a,3);

    a.showscore(a, 3);

}

(2)写出下列程序的执行结果,然后上机进行验证。用VC6的Debug的功能跟踪构造函数、析构函数和成员函数的执行顺序。

运行结果如下:

调用构造函数

x=2     y=50    z=9

调用重载构造函数

x=33    y=20    z=80

调用析构函数

33,20和80最大值是:80

调用析构函数

2,50和9最大值是:50

(3)建立一个复数类imaginary,其私有数据成员x和y表示复数的实部和虚部,构造函数imaginary用于对复数的实部和虚部初始化,友员函数add,sub,mul和div分别用于进行复数的加、减、乘和除法运算,静态函数show用于显示运算结果。在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后输出运算结果。

#include<iostream>

using namespace std;

class imagenary

{

    int x, y;//定义实部和虚部变量

public:

    //用友元函数定义四则运算的函数

    friend imagenary add(imagenary&, imagenary&);

    friend imagenary sub(imagenary&, imagenary&);

    friend imagenary mul(imagenary&, imagenary&);

    friend imagenary div(imagenary&, imagenary&);

    friend ostream& operator<<(ostream&, imagenary);

    //定义构造函数,设初值

    imagenary(int a = 0, int b = 0)

    {

        x = a;

        y = b;

    }

    //定义静态成员函数,输出运算结果

    static void show(imagenary& a, imagenary& b)

    {

        cout << "(" << a.x << "+" << a.y << "i" << ")" << "+" << "(" << b.x << "+" << b.y << "i" << ")" << "=" << add(a, b) << endl;

        cout << "(" << a.x << "+" << a.y << "i" << ")" << "-" << "(" << b.x << "+" << b.y << "i" << ")" << "=" << sub(a, b) << endl;

        cout << "(" << a.x << "+" << a.y << "i" << ")" << "*" << "(" << b.x << "+" << b.y << "i" << ")" << "=" << mul(a, b) << endl;

        cout << "(" << a.x << "+" << a.y << "i" << ")" << "/" << "(" << b.x << "+" << b.y << "i" << ")" << "=" << div(a, b) << endl;

    }

};

imagenary add(imagenary& a, imagenary& b)

{

    imagenary temp;

    temp.x = a.x + b.x;

    temp.y = a.y + b.y;

    return temp;

}

imagenary sub(imagenary& a, imagenary& b)

{

    imagenary temp;

    temp.x = a.x - b.x;

    temp.y = a.y - b.y;

    return temp;

}

imagenary mul(imagenary& a, imagenary& b)

{

    imagenary temp;

    temp.x = a.x * b.x - a.y * b.y;

    temp.y = a.y * b.x + a.x * b.y;

    return temp;

}

imagenary div(imagenary& a, imagenary& b)

{

    imagenary temp;

    temp.x = (a.x * b.x + a.y * b.y) / (b.x * b.x + b.y * b.y);

    temp.y = (a.y * b.x - a.x * b.y) / (b.x * b.x + b.y * b.y);

    return temp;

}

//对虚部正负的输出呈现分情况讨论

ostream& operator<<(ostream& cout, imagenary a)

{

    if (a.y > 0)

        cout << "(" << a.x << "+" << a.y << "i)";

    else if (a.y = 0)

        cout << a.x;

    else

        cout << "(" << a.x << a.y << "i)";

    return cout;

}

int main()

{

    imagenary a(2, 7), b(3, 4);

    imagenary::show(a, b);

}

四、实验过程原始数据记录

实验一

9905f0b8e2144ff2af387b372320d9e6.jpg

分析:由运算结果可知,在程序中可以使用动态对象数组来描述每个学生的数据和对学生的数据进行的操作。将学生的成绩被编成一个数组,存入该动态数组中,通过for循环输入成绩,for循环输出成绩得到结果。

实验二

545eaa111dfe41b78109b720799d7745.jpg

分析:通过Debug的功能跟踪构造函数、析构函数和成员函数的执行顺序,验证了与自己所写的运行结果相符。由运行 可知,先构造的对象最后调用析构函数,后构造的对象先调用析构函数。

实验三

617c4f44602b4f4cae3cbc45727ab39b.jpg

分析:通过两个复数的四则运算法则,得到该运行结果。

五、实验结果及分析

总结:

  1. 通过在类中定义一个数据成员为该类的指针函数,使用动态对象数组,能够实现描述多个数据的功能。
  2. 注意对输入输出流的重载,实现对某类的输入与输出。
  3. 先构造的对象最后调用析构函数,后构造的对象先调用析构函数。
  4. 通过定义友元函数能够实现对类中数据的四则运算。
  5. 运用for循环能够实现对多个数据的连续输入与输出。

个人小结:

通过这次实验,我掌握了声明类的方法,了解类和类的成员概念以及定义对象,成员函数,友元函数,静态成员函数的方法,掌握引检查和调试基于对象和程序的方法;深刻领会类与对象的区别,还有类实现数据隐藏与封装的原理。

标签:函数,temp,广州大学,imagenary,面向对象,int,程序设计,成绩,cout
From: https://blog.csdn.net/m0_74013441/article/details/143672327

相关文章

  • 广州大学面向对象程序设计实验五
    广州大学学生实验报告开课实验室:计算机科学与工程实验(电子楼418A)  2023年5月25日学院计算机科学与网络工程学院年级、专业、班姓名学号实验课程面向对象程序设计成绩实验项目实验五 综合应用程序指导老师一、实验目的:本实验是对前面......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—静态成员与方法
    在Java中,静态成员和静态方法是类的一部分,而不是类的实例的一部分。这意味着静态成员和方法可以在没有创建类的实例的情况下访问。理解静态成员和方法的概念对于Java开发至关重要,因为它们在内存管理、性能优化和设计模式中扮演着重要角色。理论知识1.静态成员静态变量:也称......
  • 【JAVA】Java基础—面向对象编程:类的其他特性—static 关键字的使用
    在Java编程中,static关键字是一个非常重要的概念,它用于定义类级别的成员,而不是实例级别的成员。理解static的使用对于编写高效、清晰和可维护的代码至关重要。在实际开发中,static关键字通常用于创建工具类、常量、单例模式以及共享数据等场景。理论知识1.static变量静态变......
  • 用函数实现模块化程序设计习题
    写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入//写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入#include<stdio.h>intgetGCD(inta,intb){ intiM......
  • 学期2024-2025-1 学号20241424 《计算机基础与程序设计》第8周学习总结
    学期2024-2025-1学号20241424《计算机基础与程序设计》第8周学习总结作业信息|这个作业属于2024-2025-1-计算机基础与程序设计||-- |-- ||这个作业要求在[2024-2025-1计算机基础与程序设计第8周作业](https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08||这个作业的目......
  • 《计算机基础与程序设计》第八周学习总结
    学期(如2024-2025-8)学号(如:20241404)《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里(如2024-2025-1计算机基础与程序设计第八周作业)这个作业的目标<功能设计与面......
  • 2024-2025-1 20241406 刘书含《计算机基础与程序设计》第8周学习总结
    2024-2025-120241406《计算机基础与程序设计》第8周学习总结这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 如2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 功能设计与面向对象设计>面向对象设计过程面向对象语言三要素汇编、编......
  • 2024-2025-1 20241328 《计算机基础与程序设计》第八周学习总结
    2024-2025-120241328《计算机基础与程序设计》第八周学习总结作业信息课程2024-2025-1-计算机基础与程序设计作业要求2024-2025-1计算机基础与程序设计第八周作业作业目标功能设计与面向对象设计,面向对象设计过程,面向对象语言三要素,汇编、编译、解释、执行作......
  • 2024-2025-1 20241304 《计算机基础与程序设计》第8周学习总结
    2024-2025-120241304《计算机基础与程序设计》第8周学习总结作业信息|这个作业属于哪个课程|<2024-2025-1-计算机基础与程序设计)|>|-- |-- ||这个作业要求在哪里|<作业要求的链接>(如2024-2025-1计算机基础与程序设计第八周作业)||这个作业的目标|<学习目标功能设计与面......
  • 程序设计2596基于ASP.NET的滑雪网站的设计与实现【源码+讲解视频】滑雪产品租赁网站/
    项目包含:源码、讲解视频、说明文档,部署录像开发环境开发工具:VisualStudio2010或以上版本数据库:SQLServer2005或以上版本开发语言:c#操作系统:windows7或以上浏览器:GoogleChrome(推荐)、Edge、360浏览器系统用户分为:管理员、普通用户界面设计......