C++中类模板添加友元函数显示错误的解决方法

//类模板中添加友元函数
//(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();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值