//类模板中添加友元函数
//(1):要添加的友元函数是普通函数,那么可以按照类中的方法即可
//(2):如果添加的友元函数中含有SeqLn<T>&I这样的类型变量,那么这样的函数便不是普通函数,这实际上是函数模板
//如果调用的是这一类,那么必须要提前声明
//template<class T>
//void Display(SeqLn<T>&C);
//并且在类模板中要加上<T>,说明调用的是函数模板,并且类型变量是类模板中的类型变量,如果没有使用类模板中的类型变量加上<>即可,说明是函数模板
#include<iostream>
#include<string>
using namespace std;
#define InitSize 20
template<class T>
class SeqLn;
template<class T>
void Display(SeqLn<T>&C);
template<class T1, class T2>
void CharToInt(SeqLn<T1>&C, SeqLn<T2>&I);
template<class T>
class SeqLn {
public:
SeqLn();
~SeqLn();
int Insert(T x, int n);
int Delete(T&x, int n);
int SeqSize()const;
friend void Print(SeqLn<int>&I);
friend void Display<T>(SeqLn<T>&C);
friend void CharToInt<>(SeqLn<char>&C, SeqLn<int>&I);
protected:
T*arr=new T[InitSize];
int len;
};
template<class T>
SeqLn<T>::SeqLn()
{
len = 0;
}
template<class T>
SeqLn<T>::~SeqLn()
{
delete[]arr;
}
template<class T>
int SeqLn<T>::Insert(T x,int n)
{
if (n<1 || n>len + 1)return 0;
for (int i = len;i > n - 1;i--)
arr[i] = arr[i - 1];
arr[n - 1] = x;
len++;
return 1;
}
template<class T>
int SeqLn<T>::Delete(T&x, int n)
{
if (n<1 || n>len)return 0;
x = arr[n - 1];
for (int i = n - 1;i < len;i++)
arr[i] = arr[i + 1];
len--;
return 1;
}
template<class T>
int SeqLn<T>::SeqSize()const
{
return len;
}
template<class T>
void Display(SeqLn<T>&C)
{
for (int i = 0;i < C.len;i++)
cout << C.arr[i] << endl;
}
void Print(SeqLn<int>&I)
{
for (int i = 0;i < I.len;i++)
cout << I.arr[i] << endl;
}
template<class T1,class T2>
void CharToInt(SeqLn<T1>&C, SeqLn<T2>&I)
{
for (int i = 0;i < I.len;i++)
I.arr[i] = C.arr[i];
}
int main()
{
SeqLn<char> C1;
SeqLn<int> I1;
for (int i = 0;i < 10;i++)
I1.Insert(i, i+1);
for (int i = 95;i < 105;i++)
C1.Insert(i, i - 94);
Print(I1);
//Display(I1);
//Display(C1);
CharToInt(C1, I1);
//Display(I1);
getchar();
}
C++中类模板添加友元函数显示错误的解决方法
最新推荐文章于 2023-05-02 19:54:29 发布