首页 > 其他分享 >实验6 模版类、文件I/O和异常处理

实验6 模版类、文件I/O和异常处理

时间:2024-12-23 09:57:58浏览次数:6  
标签:文件 const index int 模版 Vector 实验 include size

任务4:

Vector.hpp:

 1 #pragma once
 2 #include <iostream>
 3 using namespace std;
 4 
 5 template <typename T>
 6 class Vector {
 7 private:
 8     int size_;
 9     T* data_;
10 
11 public:
12 
13     Vector(int n);
14 
15     Vector(int n, T value);
16 
17     Vector(const Vector<T>& v) : size_(v.size_), data_(new T[v.size_]) {
18         for (int i = 0; i < size_; ++i) {
19             data_[i] = v.data_[i];
20         }
21     }
22 
23     ~Vector() {}
24 
25     int size() const { return size_; }
26 
27     T& at(int index) {
28         if (index < 0 || index >= size_) {
29             throw out_of_range("Vector: Index out of range");
30         }
31         return data_[index];
32     }
33 
34     const T& at(int index) const {
35         if (index < 0 || index >= size_) {
36             throw out_of_range("Vector: Index out of range");
37         }
38         return data_[index];
39     }
40 
41     T& operator[](int index) { return data_[index]; }
42     const T& operator[](int index) const { return data_[index]; }
43 
44     template <typename T1>
45     friend void output(const Vector<T1>& v);
46 };
47 
48 
49 template <typename T>
50 void output(const Vector<T>& v) {
51     for (int i = 0; i < v.size_; ++i) {
52         cout << v.data_[i];
53         if (i != v.size_ - 1) cout << ", ";
54     }
55     cout << endl;
56 }
57 template<typename T>
58 Vector<T>::Vector(int n) : size_(n){
59         if (n < 0) {
60             throw length_error("Vector constructor: negative size");
61         }
62         else
63         {
64             data_ = new T[size_];
65         }
66     }
67 template<typename T>
68 Vector<T>::Vector(int n, T value) : size_(n) {
69         if (n < 0) {
70             throw length_error("Vector constructor: negative size");
71         }
72         else
73         {
74             data_ = new T[size_];
75             for (int i = 0; i < size_; i++)
76             {
77                 data_[i] = value;
78 
79             }
80         }
81     }

task.cpp:

 1 #include <iostream>
 2 #include "Vector.hpp"
 3 void test1() {
 4     using namespace std;
 5 
 6     int n;
 7     cout << "Enter n: ";
 8     cin >> n;
 9 
10     Vector<double> x1(n);
11     for(auto i = 0; i < n; ++i)
12         x1.at(i) = i * 0.7;
13 
14     cout << "x1: "; output(x1);
15 
16     Vector<int> x2(n, 42);
17     const Vector<int> x3(x2);
18 
19     cout << "x2: "; output(x2);
20     cout << "x3: "; output(x3);
21 
22     x2.at(0) = 77;
23     x2.at(1) = 777;
24     cout << "x2: "; output(x2);
25     cout << "x3: "; output(x3);
26 }
27 
28 void test2() {
29     using namespace std;
30 
31     int n, index;
32     while(cout << "Enter n and index: ", cin >> n >> index) {
33         try {
34             Vector<int> v(n, n);
35             v.at(index) = -999;
36             cout << "v: "; output(v);
37         }
38         catch (const exception &e) {
39             cout << e.what() << endl;
40         }
41     }
42 }
43 
44 int main() {
45     cout << "测试1: 模板类接口测试\n";
46     test1();
47 
48     cout << "\n测试2: 模板类异常处理测试\n";
49     test2();
50 }

 

 

任务5:

people.hpp:

 1 #pragma once
 2 #include<iostream>
 3 #include<string>
 4 #include<iomanip>
 5 
 6 using namespace std;
 7 
 8 class people
 9 {
10 private:
11     int xuehao;
12     string name;
13     string major;
14     int score;
15 public:
16     people() = default;
17     ~people() = default;
18 
19     string get_major()const
20     {
21         return major;
22     }
23     int get_score()const
24     {
25         return score;
26     }
27 
28     friend ostream& operator<<(ostream& out, people& p);
29     friend istream& operator>>(istream& in, people& p);
30 
31 
32 };
33 
34 ostream& operator<<(ostream& out, people& p)
35 {
36     out << setiosflags(ios_base::left);
37     out << setw(10) << p.xuehao
38         << setw(10) << p.name
39         << setw(10) << p.major
40         << setw(10) << p.score << endl;
41     return out;
42 
43 }
44 
45 istream& operator>>(istream& in, people& p)
46 {
47     in >> p.xuehao >> p.name >> p.major >> p.score;
48     return in;
49 
50 
51 
52 }

tools.hpp:

 1 #pragma once
 2 #include"people.hpp"
 3 #include<iostream>
 4 #include<string>
 5 #include<fstream>
 6 #include<vector>
 7 
 8 bool paixu(const people& p1, const people& p2)
 9 {
10     if (p1.get_major() < p2.get_major())
11     {
12         return true;
13     }
14     if (p1.get_major() == p2.get_major())
15     {
16         return p1.get_score() > p2.get_score();
17 
18     }
19     return false;
20 
21 }
22 
23 void output(ostream& out, vector<people>& v)
24 {
25     for (auto& i : v)
26     {
27         out << i;
28     }
29 
30 }
31 
32 void save(const string& filename, vector<people>& v)
33 {
34     ofstream out(filename);
35     if (!out.is_open())
36     {
37         cout << "文件写入失败" << endl;
38         exit(0);
39     }
40 
41     output(out, v);
42     out.close();
43 
44 }
45 
46 void load(const string& filename, vector<people>& v)
47 {
48     ifstream in(filename);
49 
50     if (!in.is_open())
51     {
52         cout << "文件读出失败" << endl;
53         exit(0);
54     }
55 
56     string firstline;
57     getline(in, firstline);
58     people p;
59     while (in >> p)
60     {
61         v.push_back(p);
62     }
63 
64     in.close();
65 }

task5.cpp:

 1 #include"people.hpp"
 2 #include"tools.hpp"
 3 #include<iostream>
 4 #include<string>
 5 #include<vector>
 6 #include<algorithm>
 7 
 8 int main()
 9 {
10 
11     vector<people> v;
12     load("data5.txt", v);
13     sort(v.begin(), v.end(), paixu);
14 
15     output(cout, v);
16     save("ans.txt", v);
17 
18 
19     return 0;
20 }

 总结:通过本次实验我体验到异常处理的基础用法,异常处理的机制和流程
;也训练了综合应用类的封装、继承、多态特性及现代C++标准库编写正确、高效、安全代码

 

标签:文件,const,index,int,模版,Vector,实验,include,size
From: https://www.cnblogs.com/-transparent/p/18623263

相关文章

  • 融云IM干货丨pages.json 文件用来对 uni-app 进行全局配置
    在uni-app中,`pages.json`文件是一个非常重要的配置文件,它用于定义应用中的页面路径、窗口表现以及全局配置等。以下是`pages.json`文件的一些关键配置项和它们的作用:1.**pages**:  -这个数组定义了应用中的所有页面路径,每个对象代表一个页面。数组中的每个对象至少包含......
  • Ftrans文件摆渡系统 让跨网文件传输更快捷、更安全!
    很多含有敏感信息的行业,包括但不限于:集成电路、政府、金融、能源、医疗、制造以及一些高新技术企业,都会采用网络隔离的方式来保护核心数据,这就产生了跨网文件传输的业务场景。面临这种场景,最好是采用专业的文件摆渡系统来解决传输和管控问题。 一、跨网文件传输的业务需求安......
  • 实验七
    任务4:#include<stdio.h>#include<ctype.h>#defineN100intmain(){charch;FILE*fp;intlines=0;intchars=0;fp=fopen("d:\\data4.txt","r");if(!fp){printf("failtoopenfil......
  • 实验6
    41#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9intsales_count;//......
  • 实验6
    text41#include<stdio.h>2#defineN103typedefstruct{4charisbn[20];//isbn号5charname[80];//书名6charauthor[80];//作者7doublesales_price;//售价8intsales_count;//销售册数9}Book;10voidoutput(Bookx[],intn){11......
  • 实验7 文件应用编程
    实验任务41#include<stdio.h>2#include<stdlib.h>34intmain(){5FILE*fp;6charch;7intlines=0,characters=0;89fp=fopen("data4.txt","r");10if(fp==NULL){11pr......
  • 文件包含tomato靶机通关
    连接到靶机将网址放到dirb中扫描一下得到了三个目录我们挨个访问一下第一个是主目录第二个是主页面第三个报错我们在主目录页面继续访问发现了info.php打开发现存在文件包含我们查看页面源代码现存在文件包含的参数是image我们通过读取/etc/passwd来......
  • 文件解析漏洞
    IIS解析漏洞在iis6.x中,.asp文件夹中的任意文件都会被当做asp文件去执行在默认网站里创建一个a.asp文件夹并创建一个1.jpg写进我们的asp代码单独创建一个1.jpg发现并不能解析在a.asp下被解析Nginx解析漏洞(nginx_parsing&CVE-2013-454)nginx_parsing访问网站写一个图......
  • 常见文件解析漏洞
    IIS解析漏洞IIS6.X#环境WindowsServer2003在iis6.x中,.asp文件夹中的任意文件都会被当做asp文件去执行在默认网站里创建一个a.asp文件夹并创建一个1.jpg写进我们的asp代码<%=now()%>#asp一句话<%evalrequest("h")%>单独创建一个1.jpg发现并不能解析在a.asp下被......
  • 文件包含漏洞(hackme和tomato靶机实战)
    hackme靶机1.扫描靶机IP靶机搭好后扫描我们靶机的IPnmap-O192.168.187.128/24扫描到靶机的IP后去访问他2.信息收集挨个访问后有文件上传的路径;uploads网站登录界面;login.php3.寻找薄弱点网页首页是个登录界面,注册个账号登录看看登录后的界面判断是......