C++ 模板类的友元函数:C++;
我编写了一个代码:C++ 模板类的友元函数:C++;,c++,C++,我编写了一个代码: #include <iostream> #include <cassert> using namespace std; template<typename T> class dynArray{ int size; T* ptr; public: dynArray(int n=0); ~dynArray(); T& operator[] (const int index);
#include <iostream>
#include <cassert>
using namespace std;
template<typename T>
class dynArray{
int size;
T* ptr;
public:
dynArray(int n=0);
~dynArray();
T& operator[] (const int index);
friend ostream& operator<<<T>(ostream& os,const dynArray<T>& A);
};
template<typename T> dynArray<T>::dynArray(int n):size(n){
if (size==0)
{
cout << "Size Zero"<< endl;
ptr=NULL;}
else
{
try{
ptr = new T[size];
cout << "Constructor Called" << endl;
}
catch(bad_alloc xa)
{
cout << "Allocation Failure" <<endl;
exit(EXIT_FAILURE);
}
}
}
template<typename T> dynArray<T>::~dynArray(){
cout << "Destructor Called for array of size : " << size << endl;
delete[] ptr;
}
template<typename T> T& dynArray<T>::operator[] (const int index){
assert(index >=0 && index <size);
return *(ptr+index);
}
template<typename T> ostream& operator<< <T>(ostream& os,const dynArray<T>& A){
for (int i=0; i < A.size ; i++)
os << *(A.ptr+i) << " ";
return os;
}
int main()
{
dynArray<int> array1;
dynArray<int> array2(5);
array2[0]=15;
array2[3]= 45;
cout << array2 << endl;
return 0;
}
#包括
#包括
使用名称空间std;
模板
类dynArray{
整数大小;
T*ptr;
公众:
dynArray(int n=0);
~dynArray();
T&运算符[](常数整数索引);
类中的friend ostream和运算符将friend声明为:-
template<typename U>
friend ostream& operator<<(ostream& os,const dynArray<U>& A);
模板
friend ostream&operator您不能friend
一个未声明的模板函数的特化。您需要声明操作符!但是您可能不应该在friend
声明中声明
。只是
更为常见。@ooga我认为它不会与t
混淆在我的经验中,任何一种没有模板的
关键字的
都足以让人困惑-T
或noT
。我希望多说一点会有帮助。我认为那里不允许有T。也许使用不同的字母会更好?不过,很好的解释。这不是“a”代码,它只是代码,或者一些代码,或者就像我们人类说的,“一个程序”。-)
template<typename U>
friend ostream& operator<<(ostream& os,const dynArray<U>& A);
template<typename U>
ostream& operator<< (ostream& os,const dynArray<U>& A){...}
template<typename T> class dynArray;
template<typename T>
ostream& operator << (ostream& os, const dynArray<T>& A);
template<typename T>
class dynArray {
// ...
friend ostream& operator<< <T>(ostream& os, const dynArray& A);
};
friend ostream& operator<< <> (ostream& os, const dynArray& A);
template<typename T>
class dynArray {
// ...
friend ostream& operator<< (ostream& os,const dynArray& A) {
for (int i=0; i < A.size ; i++)
os << *(A.ptr+i) << " ";
return os;
}
};