//第二十三模板 16多余的临时对像 //未具体化num模板类构造函数 /* #include <iostream> using namespace std; const int size=2; class people { public: people(int); people(); ~people(); int GetAge()const{ return age;} void SetAge(int the){ age = the;} people &operator=(const people&r){ cout<<"调用people类的operator=函数..."<<endl; if(this==&r){ return *this; } age = r.age; return *this; } private: int age; }; ostream&operator<<(ostream &out, const people&the) { out<<"调用people类的operator<<函数"<<endl; out<<the.GetAge(); return out; } people::people(int thisAge):age(thisAge) { cout<<"调用people类的带一个参数的构造函数"<<endl; } people::people():age(0){ cout<<"调用people类的默认构造函数..."<<endl; } people::~people() { cout<<"调用people类的析构函数..."<<endl; } template<template<class T> class TT, class T> ostream &operator <<(ostream &out, const TT<T> &tt); template<class T> class num { public: num(int Tsize=size); ~num(){ cout<<"调用num模板类的析造函数.."<<endl; 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; } friend ostream &operator<< <>(ostream &out, const num<T> &tt); private: int numsize; T *pt; }; template <template <class T> class TT, class T> ostream &operator<<(ostream &out, const TT<T> &tt) { cout<<"调用num模板类的operator<<函数..."<<endl; for(int i=0; i<tt.GetSize(); i++) { out<<tt[i]<<endl; } return out; } template<class T> num<T>::num(int size):numsize(size) { cout<<"调用num模板类的带一个参数的构造函数"<<endl; pt = new T[size]; for(int i=0; i<size; i++){ pt[i] = 0; } } template <class T> num<T>&num<T>::operator=(const num&r) { cout<<"调用num模板类的operator=函数..."<<endl; 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<people>two; for(int i=0; i<two.GetSize(); i++) { two[i] = i*4; } cout<<two; return 0; } */ //增加具体化num模板构造函数 /*#include <iostream> using namespace std; const int size=2; class people { public: people(int); people(); ~people(); int GetAge()const{ return age;} void SetAge(int the){ age = the;} people &operator=(const people&r){ cout<<"调用people类的operator=函数..."<<endl; if(this==&r){ return *this; } age = r.age; return *this; } friend ostream&operator<<(ostream&, const people&); private: int age; }; ostream&operator<<(ostream &out, const people&the) { cout<<"调用people类的operator<<函数"<<endl; out<<the.GetAge(); return out; } people::people(int thisAge):age(thisAge) { cout<<"调用people类的带一个参数的构造函数"<<endl; } people::people():age(0){ cout<<"调用people类的默认构造函数..."<<endl; } people::~people() { cout<<"调用people类的析构函数..."<<endl; } template<template<class T> class TT, class T> ostream &operator <<(ostream &out, const TT<T> &tt); template<class T> class num { public: num(int Tsize=size); ~num(){ cout<<"调用num模板类的析造函数.."<<endl; 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; } friend ostream &operator<< <>(ostream &out, const num<T> &tt); private: int numsize; T *pt; }; template <template <class T> class TT, class T> ostream &operator<<(ostream &out, const TT<T> &tt) { cout<<"调用num模板类的operator<<函数..."<<endl; for(int i=0; i<tt.GetSize(); i++) { out<<tt[i]<<endl; } return out; } template<class T> num<T>::num(int size):numsize(size) { cout<<"调用num模板类的带一个参数的构造函数"<<endl; pt = new T[size]; for(int i=0; i<size; i++){ pt[i] = 0; } } num<people>::num(int snum):numsize(snum) { cout<<"调用num模板类带一个参数的特殊构造函数"<<endl; pt = new people[snum]; } template <class T> num<T>&num<T>::operator=(const num&r) { cout<<"调用num模板类的operator=函数..."<<endl; 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<people>two; for(int i=0; i<two.GetSize(); i++) { two[i] = i*4; } cout<<two; return 0; }*/