首页 > 其他分享 >实验6-模板类和文件

实验6-模板类和文件

时间:2022-12-01 17:26:25浏览次数:37  
标签:文件 int Vector 实验 template output include 模板 out

task3:

task3.1.cpp

 1 #include<iostream>
 2 #include<fstream>
 3 #include<array>
 4 #define N 5
 5 int main()
 6 {
 7     using namespace std;
 8     array<int ,5> x{97,98,99,100,101};
 9     ofstream out;
10     out.open("data1.dat",ios::binary);
11     if(!out.is_open())
12     {cout<<"打开失败";
13     return 1;
14     }
15 out.write(reinterpret_cast<char *>(&x),sizeof(x));
16     out.close();
17 }

task3.2.cpp

 1 #include<iostream>
 2 #include<fstream>
 3 #include<array>
 4 #define N 5
 5 int main()
 6 {
 7     using namespace std;
 8     array<int ,5> x{97,98,99,100,101};
 9     ifstream in;
10     in.open("data1.dat",ios::binary);
11     if(!in.is_open())
12     {cout<<"打开失败";
13     return 1;
14     }
15     in.read(reinterpret_cast<char *>(&x),sizeof(x));
16     in.close();
17     for(auto i=0;i<N;++i)
18     cout<<x[i]<<",";
19     cout<<"\b\b\n";
20 }

 

 

 代码改动过后运行结果如下

 

原因分析如图所示:

task4:

task4.hpp

 1 #pragma once
 2 
 3 #include<iostream>
 4 using namespace std;
 5 template <typename T>
 6 class Vector{
 7     public:
 8     Vector(int n0);
 9     Vector(int n0,T value);
10     Vector(const Vector<T> &v1);
11     ~Vector();
12     int get_size() const {return n ;}
13     T& at(int i){return *(p+i);} 
14     T& operator[](int i){return *(p+i);}
15     template<typename T1>
16     friend void output( Vector<T1> &x);
17     
18     private:
19         int n;
20         T *p;
21 };
22 template <typename T>
23 Vector<T>::Vector(int n0)
24 {
25     n=n0;
26     p=new T[n];
27     //cout<<"没有初始值的构造函数被调用";
28     
29 }
30 template <typename T>
31 Vector<T>::Vector(int n0,T value)
32 {
33     n=n0;
34     p=new T[n];
35     for(int i=0;i<n;i++)
36     *(p+i)=value;
37     //cout<<"有初始值的构造函数被调用";
38 }
39 template <typename T>
40 Vector<T>::Vector(const Vector<T>& v1)
41 {n=v1.n;
42 p=new T[n];
43 for(int i=0;i<n;i++)
44 p[i]=v1.p[i];
45 }
46 template <typename T>
47 Vector<T>::~Vector()
48 {
49     delete [] p;
50 }
51     template<typename T1>
52 void output(Vector<T1>&x)
53 {for(int i=0;i<x.n;i++)
54 cout<<x.at(i)<<",";
55 cout<<endl; 
56 }

task4.cpp:

 1 #include <iostream>
 2 #include "Vector.hpp"
 3 
 4 void test() {
 5     using namespace std;
 6 
 7     int 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     output(x1);
15 
16     Vector<int> x2(n, 42);
17     Vector<int> x3(x2);
18 
19     output(x2);
20     output(x3);
21 
22     x2.at(0) = 77;
23     output(x2);
24 
25     x3[0] = 999;
26     output(x3);
27 }
28 
29 int main() {
30     test();
31 }

 

 

 

 

 

实验当中出现的 问题:

1.注意语法,在类外声明类的成员函数的时候,声明一个就必须要在前面加一个template<typename T>。而在声明类的友元的时候,在类的内部和外部都需要在函数声明前加上template<typename T1>(和成员函数模板元素名子不同)。

2.设计好类的数据成员,要根据场景进行设计,不能类型只是T。

task5:

 1 #include<iostream>
 2 #include<string>
 3 #include<fstream>
 4 #include<iomanip>
 5 using namespace std;
 6 
 7 void output(ostream &out)
 8 {
 9     
10     
11     cout<<"   ";
12 out<<"   ";
13     for( int i=97;i<123;i++)
14 {
15 cout<<char(i)<<" ";
16 out<<char(i)<<" ";
17 }
18 
19     cout<<endl;
20     out<<endl;
21     int count=1;
22     for(count=1;count<=26;count++)
23     {
24         cout<<setw(2)<<count<<" ";
25         out<<setw(2)<<count<<" ";
26         for(int i=65+count ,k=1;k<=26;i++,k++)
27         {int temp=(i-65)%26+65;
28         cout<<char(temp)<<" ";
29         out<<char(temp)<<" ";
30         }
31         cout<<endl;
32         out<<endl;
33     }
34 
35 
36 }

 

 

实验5当中的注意事项:

1.函数参数传递中用到了类的继承中类型兼容原则,ofstream这个派生类的对象可以作为基类ostream的对象去使用。

2.创建了ofstream的对象out,并用out打开文件。向文件中写数据的方式有两种。一种如task3中利用write函数(这种一般要知道要往文件里写多少个字节),一种就是task5中直接用对象配合运算符”<<“进行向文件写入。

实验总结:

1.通过这次实验,更进一步的学习了模板的知识以及相关的语法,并在task1,ask4的实践中应用。

2.学会了向文件导入数据的两种方式,在task3和task5中得到了实践。

 

 

标签:文件,int,Vector,实验,template,output,include,模板,out
From: https://www.cnblogs.com/xiaozhengcaicai/p/16942047.html

相关文章

  • Microsoft Excel 文件处理之xlwt库(Python)
    MicrosoftExcel文件处理之xlwt库(Python)前言博主想将格式化数据:csv、json、xml转换成excel表格,且利用C语言实现。查看了很多资料,没有找到excel操作库,就放弃了。虽然C语......
  • 定义ignore配置文件忽略文件统计
    /*#include<iostream>#include<string>#include<regex>#include<boost/property_tree/ptree.hpp>#include<boost/property_tree/ini_parser.hpp>intmain(){std::......
  • 使用inotify向文件添加一段注释
    一需求简介:在ubuntu系统上任意打开一个文件(vim,touch获取其它方式),该新建的文件都会被写入一段注释。二实现:编译环境:ubuntu18.04实现方法:利用inotify监控目录这个特性,当在......
  • mkdir创建文件夹
     阿斯蒂芬mkdirxxx    创建文件夹xxxmkdira1a2a3    批量创建文件夹a1、文件夹a2、文件夹a3mkdir-pb1/b2/b3    连续创建文件夹b1、文件夹......
  • 解压文件到指定文件夹
     tarzxvftest.tgz-C指定目录(3条消息)Linux解压文件到指定目录_酒酿小圆子~的博客-CSDN博客_linux解压文件到指定目录Linux解压文件到指定目录-整合侠-博客园......
  • Linux 中的文件简单说明
    Linux中的文件简单说明作者:Grey原文地址:博客园:Linux中的文件简单说明CSDN:Linux中的文件简单说明说明本文基于CentOS7根目录(/)下文件夹主要作用[root@linux/......
  • 2、通知签名(把两个文件合并成一个文件)
    如果通知有两份文件的话,那么领导若不在办公室,在家办公,那么他签名的时候只会签第二页的文件,他反馈回来的是一张图片,那么如何把一个【pdf文件】和【图片】合并成一张图片用......
  • k8s拷贝文件
    k8s拷贝文件1、从宿主机目录拷贝到pod中例如,需要把宿主机中/opt/test1.txt文件拷贝到pod中的/opt目录中还是以wyn-project1-7957cdf65f-ds7lh这个pod为例查......
  • iOS学习之 plist文件的读写
    在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢?它全名是:PropertyList,属性列表文件,它是一种用来存储串行化后的对象的文件。属性列表文件的扩展名为.plist ,因此......
  • 网络渗透测试实验_1_网络扫描与网络侦察
    以下内容为课堂上的实验记录1. 实验目的和要求理解网络扫描、网络侦察的作用;通过搭建网络渗透测试平台,了解并熟悉常用搜索引擎、扫描工具的应用,通过信息收集为下一步渗......