C++实验 面向对象编程

news2024/11/20 0:22:02

一、实验目的:

掌握类中静态成员的定义方法,初始化方法,使用方法;
掌握类的友元说明方法,理解友元的使用特点

二、实验内容:

1、编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。

在这里插入图片描述

#include<iostream>
#include<stdlib.h>
#include<iomanip>
using namespace std;
struct ListPeople {
    int num;
    string name;
    struct ListPeople* next;
    ListPeople(int num, string name)
    {
        this->num = num;
        this->name = name;
    }
};
void sumpeople(ListPeople* m)//输出总人数
{
    int sum = 0;
    while (m->next != NULL)
    {
        sum++;
        m = m->next;
    }
    cout <<"总人数为:" << sum << "人" << endl;
}
int main()
{
    int num = 0;
    string name = "";
    ListPeople* head = new ListPeople(num, name);
    head->next = NULL;
    int number = 0;
    cout << "输入0查看客人总数" << endl;
    cout << "输入1客人入住" << endl;
    cout << "输入2客人退房" << endl;
    cout << "输入-1退出" << endl;
    while (number != -1)
    {
        cout << "请输入编号:";
        cin >> number;
        switch (number)
        {
        case 0://输出总人数
        {
            sumpeople(head);
            break;
        }
        case 1://客人入住
        {
            cout << "请输入入住客人姓名:";
            cin >> name;
            num++;
            ListPeople* q = new ListPeople(num, name);
            ListPeople* p = head;
            while (p->next != NULL)
                p = p->next;
            p->next = q;
            q->next = NULL;
            cout << "客人编号为:" << setw(4) << setfill('0') << q->num << ",客人姓名为:" << q->name << endl;
            sumpeople(head);
            break;
        }
        case 2://客人退房
        {
            ListPeople* m = head;
            int flag = 0;
            if (m->next == NULL)
            {
                cout << "目前没有客人入住,无法退房!" << endl;
                break;
            }
            cout << "请输入退订客人姓名:";
            cin >> name;
            while (m->next != NULL)
            {
                if (m->next->name == name)
                {
                    ListPeople* d = m->next;
                    m->next = m->next->next;
                    delete d;
                    cout << "客人退订成功" << endl;
                    sumpeople(head);
                    flag = 1;
                    break;
                }
                m = m->next;
            }
            if (flag == 0)
                cout << "未查找到该客人!" << endl;
            break;
        }           
        default:
            if (number != -1)
                cout << "请重新输入" << endl;
            else
                cout << "已退出" << endl;
        }
    }   
    return 0;
}
2、编写学生类Stu,包含学生姓名,成绩,设计一个友员函数,将学生成绩按大到小排序。

在这里插入图片描述

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
class Stu {
private:
    string name;
    float score;
public:
    Stu(string name, float score) : name(name), score(score) {}
    friend bool operator<(const Stu& s1, const Stu& s2);
    void print() {
        cout << "Name: " << name << ", Score: " << score << endl;
    }
};
bool operator<(const Stu& s1, const Stu& s2) {
    return s1.score > s2.score;
}
int main() {
    std::vector<Stu> students;
    // 添加学生信息
    students.push_back(Stu("Tom", 85.5));
    students.push_back(Stu("Alice", 92.0));
    students.push_back(Stu("John", 78.5));
    students.push_back(Stu("Emma", 95.0));
    // 按成绩排序
    std::sort(students.begin(), students.end());
    // 输出排序结果
    for (auto it : students) {
        it.print();
    }
    return 0;
}
1、编写整型数组类 arrow,能创建任意长度数组对象,用深复制

在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;

class Array {
public:
  int* arr;
  int size;
  
  Array(int length) {
  size = length;
  arr = new int[length];
  }
  
  Array(const Array &a) {
  size = a.size;
  arr = new int[size];
  memcpy(arr, a.arr, size*sizeof(int)); 
  }
  
  ~Array() {
  delete[] arr;
  }
};

int main() {
  Array a(5);
  int n;
  int x;
  cin>>n;
  for(int i=0;i<n;i++)
    cin>>x,a.arr[i]=x;
  Array b(a);
  for(int i=0;i<n;i++)
    cout << b.arr[i] << " " ;
  
  return 0;
}

2、已知三点座标,求三角形的面积。
在这里插入图片描述

#include <iostream>
#include <cmath>

using namespace std;

double getTriangleArea(int x1, int y1, int x2, int y2, int x3, int y3) {
  double a = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
  double b = sqrt((x3-x2)*(x3-x2) + (y3-y2)*(y3-y2)); 
  double c = sqrt((x1-x3)*(x1-x3) + (y1-y3)*(y1-y3));

  double s = (a + b + c) / 2;

  return sqrt(s*(s-a)*(s-b)*(s-c));
}

int main() {
  int x1 , y1 ;
  int x2 , y2 ; 
  int x3 , y3 ;
  cin>>x1>>y1;
  cin>>x2>>y2;
  cin>>x3>>y3;

  double area = getTriangleArea(x1, y1, x2, y2, x3, y3);

  cout << "Triangle area is: " << area << endl;

  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1521067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

hot100 -- 矩阵

&#x1f442; Peter Pan - kidult. - 单曲 - 网易云音乐 &#x1f442; Bibliothque&#xff08;图书馆&#xff09; - Jasing Rye - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f33c;二分模板 &#x1f382;矩阵置零 AC 标记数组 AC 标记变量 &#x1f6a9;…

AI成就画质冠军!海信电视U8N Pro的“硬参数”和“软实力”

不得不说&#xff0c;这几年AI落地大有摧枯拉朽之势&#xff0c;也离普通人的生活越来越近了。 如果说&#xff0c;曾经1997年“深蓝”计算机赢下国际象棋世界冠军&#xff0c;还没那么让人印象深刻&#xff0c;2016年Alpha Go战胜围棋世界冠军&#xff0c;即使广泛关注&#…

replace和replaceAll的区别

replace和replaceAll的区别 replaceAll有些浏览器不兼容,如下图所示 replace的使用1>若只替换一个字符串abc.replace(b,1)//a1cabcaaa.replace(a,1)//1bcaaa2>若替换所有字符串abcaaa.replace(/\a/g,1)//1bc111replaceAll的使用1>若只替换一个字符串abc.replace(b,…

AI智慧校园电子班牌云平台源码

目录 家长端 学校端 电子围栏 亲情通话 课堂答题 移动化管理模式 统一资源管理平台 模板内容智能更换 家校互联 家长端 多场景通话:上学放学联系、紧急遇险求助联系、日常亲情通话关注孩子人身安全:到校离校情况、进入危险区域预警等。 学校端 课堂秩序管理:提高教…

服务器数据恢复—服务器硬盘灯显示红色的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台服务器中有一组由多块硬盘组建的raid阵列&#xff0c;在运行过程中服务器突然崩溃&#xff0c;管理员检查服务器发现该服务器raid阵列中有两块硬盘的指示灯显示红色。于是&#xff0c;管理员重启服务器&#xff0c;服务器重启后&a…

基于Python django的人脸识别门禁系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、Python技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&…

mac redis启动,redis哨兵模式,redis集群的相关命令

Homebrew安装的软件会默认在/usr/local/Cellar/路径下 redis的配置文件redis.conf存放在/usr/local/etc路径下 cd /usr/local/Cellar/redis/7.0.10. 存在 cd /usr/local/opt/redis/bin/redis-server. 目录存在 cd /usr/local/etc/redis.conf 存在。配置文件 复制文件 cp …

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性

随着数字技术的飞速发展&#xff0c;建筑行业也在不断迈向数字化转型的道路。在这个过程中&#xff0c;BIM&#xff08;Building Information Modeling&#xff0c;建筑信息模型&#xff09;技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中&#xff…

MATLAB中visdiff函数用法

目录 语法 说明 示例 比较两个文件 比较两个文件并指定类型 发布比较报告 visdiff函数的功能是比较两个文件或文件夹。 语法 visdiff(filename1,filename2) visdiff(filename1,filename2,type) comparison visdiff(___) 说明 visdiff(filename1,filename2) 打开比较工…

JVM理解学习

参考视频 运行时数据区 JVM架构总览图 绿色的&#xff1a;方法区&#xff0c;堆&#xff0c;是所有线程共享的 黄色的&#xff1a; 虚拟机栈&#xff0c;本地方法栈&#xff0c;程序计数器&#xff0c;是线程私有的 程序计数器 程序计数器是一块较小的内存空间&#xff0c;物…

蓝桥杯单片机快速开发笔记——矩阵键盘

一、原理分析 二、示例框架 定义了四个位控制变量&#xff0c;用于控制键盘扫描时的行列信号。 在Scan_Keys()函数中&#xff0c;首先设置行列信号&#xff0c;将其中一个行信号置为0&#xff0c;另一个行信号置为1&#xff0c;同时将列信号置为1&#xff0c;用于扫描键盘按键…

力扣映射题:机器人能否返回原点

超时太多了&#xff0c;笔者也开始放弃遍历了 bool judgeCircle(char* moves) {int arr[4]{0};for(int x0;x<strlen(moves);x) {if(moves[x]R){arr[0]arr[0]1;}if(moves[x]L){arr[1]arr[1]1;}if(moves[x]U){arr[2]arr[2]1;}if(moves[x]D){arr[3]arr[3]1;}} if(arr[0]-arr[1…

php彩虹/异世界云商全解系统

系统更新与修复列表 1. 基于彩虹的二次开发 - 对彩虹系统进行了二次开发&#xff0c;增强了系统的功能和性能。2. 新增自定义输入框提示内容&#xff08;支持批量修改&#xff09; - 用户可以自定义输入框的提示内容&#xff0c;并支持批量修改&#xff0c;提升用户体验。3. 新…

掌握高级设计原则:Java中的过滤器模式解析与实战演练,构建灵活且可扩展的系统架构

过滤器模式是一种结构型设计模式&#xff0c;它允许开发者使用不同的标准来过滤一组对象&#xff0c;并通过逻辑运算以解耦的方式将它们联系起来。 过滤器模式的核心在于提供了一个处理对象的机制&#xff0c;这个机制可以根据一个或多个标准来决定哪些对象应该被接受、哪些应…

代码学习记录21--回溯算法第二天

随想录日记part21 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.16 主要内容&#xff1a;今天主要是结合类型的题目加深对回溯算法的理解&#xff1a;1&#xff1a;组合总和&#xff1b;2&#xff1a;电话号码的字母组合 216.组合总和III17.电话号码的字母…

快速了解微软推出的开发人员主页的应用

一、概述 开发人员主页是微软推出的一个新的 Windows 控制中心&#xff0c;提供以下功能&#xff1a;使用可自定义小组件监视仪表板中的项目&#xff0c;通过下载应用、包或存储库来设置开发环境&#xff0c;连接到开发人员帐户和工具&#xff08;如 GitHub&#xff09;&#x…

【C++进阶】深度解析AVL树及其简单模拟实现

AVL树的解析和模拟实现 一&#xff0c;什么是AVL树二&#xff0c;AVL树的特性三&#xff0c;模拟实现1. 基本框架2. 插入&#xff08;不带旋转&#xff09;2. AVL树的旋转3. AVL树的验证 四&#xff0c;总结 一&#xff0c;什么是AVL树 之前我们学习了二叉搜索树&#xff0c;但…

【每日力扣】40.组合总和II与701. 二叉搜索树中的插入操作

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 40.组合总和II 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为…

【小白学机器学习8】统计里的自由度DF=degree of freedom, 以及关于df=n-k, df=n-k-1, df=n-1 等自由度公式

目录 1 自由度 /degree of freedom / df 1.1 物理学的自由度 1.2 数学里的自由度 1.2.1 数学里的自由度 1.2.2 用线性代数来理解自由度&#xff08;需要补充&#xff09; 1.2.3 统计里的自由度 1.3 统计学里自由度的定义 2 不同对象的自由度 2.1 纯公式的自由度&#…

报Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String错误

在springboot中使用Mybatis出现Invalid value type for attribute factoryBeanObjectType: java.lang.String 1、没有使用mybatis 检查pom文件里面的mybatis 可能是缺少这个依赖&#xff0c;或者版本过低 重新导入依赖 <dependency><groupId>org.mybatis.spri…