C++练习代码之1

C++练习代码之1

 1 #include  < iostream >  
 2 #include  < vector >  
 3 #include  < algorithm >  
 4 #include  < string >  
 5
 6 using namespace std; 
 7
 8 template < typename T >  
 9 class  Sum
10  private
11    T val; 
12  public
13  Sum(T i) :val(i)
14  }
;
15  operator T() const
16    return val; 
17  }
;
18  T operator()(T i)
19    return val+=i; 
20  }

21  T getVal()
22    return val; 
23  }
;
24  friend ostream& operator<< (ostream &out,const Sum<T> &s)
25    return out << s.val; 
26  }
;
27}

28
29 int  main( int  argc,  char *  argv[])
30  vector<string> v; 
31  v.push_back(string("1")); 
32  v.push_back(string("2")); 
33  v.push_back(string("3"));
34  cout << "the sum is " << for_each(v.begin(), v.end(), Sum<string>("")) << "\n";
35  system("PAUSE"); 
36  return EXIT_SUCCESS; 
37}
;  
38

这里面的那个重载<<的写法,自己也还没搞懂原因,只是试出来的,为什么要加那个friend关键字才能编译通过呢?不加编译器报的错又是什么意思呢?希望有谁懂的能解释下...

你可能感兴趣的:(C++练习代码之1)