zoukankan      html  css  js  c++  java
  • 第二十三模板 7复杂类模板 简单

    // 第二十三模板 7复杂类模板
    /*#include <iostream>
    using namespace std;
    const int size=10;
    class people
    {
    public:
    	people(int i):x(i){};
    	people():x(0){}
    	int GetAge()const{ return x;}
    	void show()const{cout<<x<<endl;}
    private:
    	int x;
    };
    
    template <class T>
    class num
    {
    public:
    	num(int Tsize=size); //带一个整型的构造函数
    	num(const num&r);    //应该是个复制构造函数
    	~num(){delete []pt;}  //析构函数
    	num&operator=(const num&);   //重载=运算符
    	T&operator[](int offset){ return pt[offset]; } 
    	const T&operator[](int offset)const
    	{
    	    return pt[offset];
    	}
    	int GetSize()const{return numsize; }
    private:
    	int numsize;
    	T *pt;
    };
    template<class T>
    num<T>::num(int size):numsize(size)
    {
        pt = new T[size];
    	for(int i=0; i<size; i++){
    	   pt[i] = 0;
    	}
    }
    
    template <class T>
    num<T>::num(const num&r)
    {
    	numsize = r.GetSize();
    	pt = new T[numsize];
    	for(int i=0; i<numsize; i++){
    	    pt[i] = r[i];
    	}
    }
    
    template<class T>
    num<T>&num<T>::operator=(const num&r)
    {
    	if(this == &r){
    	     return *this;
    		 delete []pt;
    		 numsize = r.GetSize();
    		 pt = new T[numsize];
    		 for(int i=0; i<numsize; i++){
    		    pt[i] = r[i];
    		 }
    	}
    	return *this;
    }
    int main()
    {
    	num<int>one;
    	num<people>two;
    	people *p;
    	for(int i=0; i<one.GetSize(); i++)
    	{
    	   one[i] = i*2;
    	   p = new people(i*3);
    	   two[i] = *p;
    	   delete p;
    	}
    	for(int j=0; j<one.GetSize(); j++){
    	   cout<<"one["<<j<<"]:"<<"\t"<<one[j]<<"\t\t";
    	   cout<<"two["<<j<<"]:"<<"\t";
    	   two[j].show();
    	   cout<<endl;
    	}
    	//num类中定义的复制构造函数和operator=()函数都没有被使用
    	//当我们在创建一个num灰对像并用一个已经存在的num类对像对其进行初始化时会调用复制构造函数
    	num<people>three = two;
    	for(int jj=0; jj<three.GetSize(); jj++){
    	   cout<<"three["<<jj<<"]:"<<"\t";
    	   three[jj].show();
    	   cout<<endl;
    	}
    	//最后要注意模板成员函数的定义方法
    	//声明中写内嵌函数
    	//T&operator[](int offset){ return pt[offset]; }
    	//在类的外部写成员函数,必须这么写
    	//T& num<T>::operator[](int offset)
        //{
    	//    retrun pt[offset];
    	//}
    	//T为返回类型,num<T>o为模板类名称,之后面加作用域解析符::,表示后面的operator[]()函数是属于该模板类的
    
        return 0;
    }*/
    

      

  • 相关阅读:
    Windows删除被占用的文件或文件夹
    Fatal error in launcher: Unable to create process using
    World/excel无法同时打开两个解决办法
    Zabbix故障处理系列
    第1章 数据库系统概述
    第2章 关系数据库
    第3章 数据库设计
    Linux命令概况
    Python -扩展C++-Pytorch扩展
    技术栈_人工智能-大数据-云计算
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2711682.html
Copyright © 2011-2022 走看看