类模板中的友元,友元类

一:让类模板的某个实例成为友元。

#include <iostream>
#include <vector>
#include <list>
using namespace std;
#pragma warning(disable : 4996) 

template <typename T> class B; //声明
template <typename T>
class A
{
    
    
	friend class B<int>;  //针对int类型的类B,
private:
	int data;
};
template <typename T>
class B
{
    
    
public:
	void callfun()
	{
    
    
		A<int> p;
		p.data = 10;	
		cout << p.data << endl;
	}
};
int main()
{
    
    
	B<int> obj;
	obj.callfun();
	return 0;
}

二:类模板成为友元类模板。

#include <iostream>
#include <vector>
using namespace std;
#pragma warning(disable : 4996) 
template <typename T>
class A
{
    
    
	template <typename T>
	friend class B;
private:
	int data;
};
template <typename T>
class B
{
    
    
public:
	void callfun()
	{
    
    
		A<int> p;
		p.data = 10;	
		cout << p.data << endl;
	}
};

int main()
{
    
    
	B<long> obj;
	obj.callfun();
	return 0;
}

三:让类型模板参数成为友元类,cpp11。

#include <iostream>
#include <vector>
using namespace std;
#pragma warning(disable : 4996) 

template <typename T>
class A
{
    
    
	friend T; //cpp11
private:
	int data;
};
class B
{
    
    
public:
	void call()
	{
    
    
		A<B> obj;
		obj.data = 10;
		cout << obj.data << endl;
	}
};
int main()
{
    
    
	B b;
	b.call();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/121178841