zoukankan      html  css  js  c++  java
  • 数组模板

    MyVector.h

    //模板类,不要分开多文件去写。要类的声明和类函数的实现体放在一个文件中去写。这里没有分开写
    //如果要岔开写的的,需要将实现体的文件 #include进来(即实现函数的.cpp文件)。

    #define  _CRT_SECURE_NO_WARNINGS 
    #pragma  once
    #include <iostream>
    using namespace std;
    //1 Myvector 能够存放 int,char, 
    //2 MyVector 能够存放 Teacher对象
    //函数的声明和类的
    template<class T>
    class MyVector
    {
    	friend ostream& operator<<<T>(ostream &out,MyVector &myvector);//友元函数声明
    public:
    	MyVector();
    	MyVector(int len);
    	MyVector(const MyVector &another);//拷贝构造函数
    	~MyVector();
    	MyVector& operator=(const MyVector &another);
    	T& operator[](int index);
    private:
    	int len;
    	T *space;
    };
    
    //函数的实现
    template<typename T>
    MyVector<T>::MyVector()//构造函数
    {
    	space=NULL;
    	this->len=0;
    }
    template<typename T>
    MyVector<T>::MyVector(int len)//构造函数
    {
    	space=new T[len];
    	this->len=len;
    }
    template<typename T>
    MyVector<T>::MyVector(const MyVector &another)//拷贝构造函数
    {
    	len=another.len;
    	space=new T[len];
    	for(int i=0;i<len;i++)
    	{
    		space[i]=another.space[i];
    	}
    }
    template<typename T>
    MyVector<T>::~MyVector()//析构函数
    {
    	if(space!=NULL)
    	{
    		delete[] space;
    		space=NULL;
    		len=0;
    	}
    }
    template<typename T>
    T& MyVector<T>::operator[](int index)
    {
    	return space[index];
    }
    template<typename T>
    MyVector<T>& MyVector<T>::operator=(const MyVector<T> &another)
    {
    	//先把释放旧的内存
    	if(space!=NULL)
    	{
    		delete[] space;
    		space=NULL;
    		len=0;
    	}
    	//跟据情况分配内存
    	this->len=another.len;
    	this->space=new T[len];
    	//拷贝数据
    	for(int i=0;i<len;i++)
    	{
    		this->space[i]=another.space[i];
    	}
    	return *this;//返回本身
    }
    template<typename T>
    ostream& operator<<(ostream &out,MyVector<T> &myvector)
    {
    	for(int i=0;i<myvector.len;i++)
    	{
    		out<<myvector.space[i]<<" ";
    	}
    	return out;
    }
    

      test_MyVector.cpp测试数组模板

    #include <iostream>
    using namespace std;
    #include <string>
    #include "MyVector.h"
    class Teacher
    {
    	friend ostream& operator<<(ostream &out,Teacher &t)//友元函数声明
    	{
    		out<<"姓名:"<<t.name<<" 年龄:"<<t.age<<endl;
    		return out;
    	}
    public:
    	Teacher()
    	{
    		//this->name="";
    		///////
    		this->name=NULL;
    		////////
    		this->age=0;
    	}
    	//Teacher(string name,int age)
    	Teacher(char *name,int age)
    	{
    		//this->name=name;
    		//////////////
    		this->name=new char[strlen(name)+1];
    		strcpy(this->name,name);
    		////////////////
    		this->age=age;
    	}
    	Teacher(const Teacher &another)
    	{
    		//this->name=another.name;
    		/////////////////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->age=0;
    		}
    		this->name=new char[strlen(another.name)+1];
    		strcpy(this->name,another.name);
    		////////////////////
    		this->age=another.age;
    	}
    	~Teacher()
    	{
    		//this->name="";
    		//////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->name=NULL;
    		}
    		this->age=0;
    		////////////////
    	}
    	Teacher& operator=(const Teacher &another)
    	{
    		//this->name=another.name;
    		/////////////////////////
    		if(this->name!=NULL)
    		{
    			delete[] this->name;
    			this->age=0;
    		}
    		this->name=new char[strlen(another.name)+1];
    		strcpy(this->name,another.name);
    		//////////////////////
    		this->age=another.age;
    		return *this;
    	}
    private:
    	//string name;//使用string类比较简单在C++中尽可能使用string表示字符串
    	char *name;//char *name就会涉及到深拷贝和浅拷贝问题
    	int age;
    };
    int main()
    {
    	MyVector<int> vector_int(10);
    	for(int i=0;i<10;i++)
    	{
    		vector_int[i]=i+1;
    	}
    	cout<<vector_int<<endl;
    	MyVector<int> vector_intcopy;
    	vector_intcopy=vector_int;
    	cout<<vector_intcopy<<endl;
    	MyVector<char> vector_char(5);
    	for(int i=0;i<5;i++)
    	{
    		vector_char[i]=i+'a';
    	}
    	cout<<vector_char<<endl;
    	Teacher t1("jueshi",23);
    	Teacher t2("quanyecha",25);
    	Teacher t3("honglve",28);
    	MyVector<Teacher> vector_teacher(3);
    	vector_teacher[0]=t1;
    	vector_teacher[1]=t2;
    	vector_teacher[2]=t3;
    	cout<<vector_teacher<<endl;
    }
    

      

  • 相关阅读:
    Centos7 GRE Tunnel
    centos 7 增加永久静态路由
    ceph bluestore与 filestore 数据存放的区别
    swift对象存储安装
    [WebRTC] Audio Codec Encoder 基类注解
    [WebRTC] 源码中的Audio Codec整理
    [Math] Maple函数用法
    [Server] Nginx Https配置 及 Firefox提示“此页面使用较弱加密”
    [Windows] 导出所有设置过的Group Policy
    [Tool] WebDav 安装及使用
  • 原文地址:https://www.cnblogs.com/jueshi0208/p/5549238.html
Copyright © 2011-2022 走看看