浅析将一个类作为另一个类的友元

友元出现的的意义就在于它可以让一个类得到访问这个类的私有成员的权限。下面的程序主要讲解的是如何将一个类作为另一个类的友元。友元的声明可以放在public或者是private,这两个都是可以的。也就是说友元的声明只要出现在类的定义的内部就可以了。

#include<iostream>
using namespace std;
class screen{
public:
	friend class windowmgr;
	screen(){}
	screen(int a,int b)
	{
		height=a;
		width=b;
	}
	void print()
	{
		cout<<height<<" "<<width<<endl;
	}
private:
	int height;
	int width;
	typedef int index;
	friend class windowmgr;
};
class windowmgr{
public:
	windowmgr& relocate(screen::index r,screen::index c,screen &s)
	{
		s.height+=r;
		s.width+=c;
		return *this;
	}
};
int main()
{
	screen go(1,2);
	windowmgr ko;
	ko.relocate(2,3,go);
	go.print();
	system("pause");
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想让一个模板成为另一个模板的友元,你可以将该模板的实例化版本作为友元声明。当然,你也可以将该模板本身作为友元声明,这样将会允许该模板的所有实例化版本都作为友元。 下面是一个一个模板声明为另一个模板的友元的示例代码: ``` template<typename T> class MyTemplateClass { public: MyTemplateClass(T value); void printValue(); private: T m_value; }; template<typename T> MyTemplateClass<T>::MyTemplateClass(T value) : m_value(value) {} template<typename T> void MyTemplateClass<T>::printValue() { std::cout << "The value is: " << m_value << std::endl; } template<typename T> class MyFriendClass { public: void printValue(const MyTemplateClass<T>& obj) { std::cout << "The value is: " << obj.m_value << std::endl; } }; int main() { MyTemplateClass<int> obj(42); MyFriendClass<int> friendObj; friendObj.printValue(obj); return 0; } ``` 在这个示例代码中,我们定义了一个模板`MyTemplateClass`,和另一个模板`MyFriendClass`。我们将`MyFriendClass`声明为`MyTemplateClass`的友元,并在`MyFriendClass`中定义了一个成员函数`printValue`,该函数接受一个`MyTemplateClass`型的对象作为参数,并打印出这个对象的私有成员`m_value`。 在`main`函数中,我们实例化了一个`MyTemplateClass`对象,并创建了一个`MyFriendClass`对象`friendObj`,然后通过`friendObj.printValue(obj)`调用了`MyFriendClass`的`printValue`函数,输出了`MyTemplateClass`对象的私有成员值。 需要注意的是,我们在实例化`MyFriendClass`的时候传入了模板参数`int`,这样才能够使`MyFriendClass`和`MyTemplateClass<int>`成为友元。如果你想使用其他型,你需要进行相应的实例化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值