C++友元类使用之前置声明(定义变量)

本文探讨了C++中友元类的使用方法,并通过一个简单的示例程序展示了如何正确声明和使用友元类。文章还讨论了在类定义之前进行类型声明的重要性,避免编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天项目使用到了友元类,于是便先试着搞个简单地使用例子

#include<iostream>
class b;
class a
{
private:
int value;
protected:
void funprotected();
public:
friend b;
a(int x);
//b bclass;
void funpublic();
};


a::a(int x)
{
value = x;
}

class b
{
public:
void fun(a&);
};
void b::fun(a& aclass)
{
std::cout << aclass.value << std::endl;
}


int main()
{
a aclass(5);
b bclass;
bclass.fun(aclass);
return 0;
}

在程序编译时顺利通过,但是去掉其中注释后就会提示未定义的类型b,我查了一下,在实际定义类体之前,不能用该类型去定义变量,只能做声明,但是,我想这应该不算是定义变量吧,因为并没有分配内存,好吧,我已经被迫认为注释掉的那一行就是定义变量了。

C++中,是一种特殊型的,它允许一个访问另一个的私有和保护成员。通过关系,可以使得一个访问另一个的特定部分,而不必进行继承或者特化。下面是一个使用的例子: ```cpp #include <iostream> class FriendlyClass { public: int public_member = 42; int private_member; // 声明一个函数 friend void access_private_member(FriendlyClass& obj); // 声明一个 class FriendlyClassFriend { public: void print() { std::cout << "FriendlyClass's private member: " << obj.private_member << std::endl; } }; }; // 函数,访问FriendlyClass的私有成员 void access_private_member(FriendlyClass& obj) { std::cout << "Accessing private member of FriendlyClass: " << obj.private_member << std::endl; } int main() { FriendlyClass friend_class; friend_class.private_member = 3; // 设私有成员的值 std::cout << "Before accessing private member through friend class:" << std::endl; std::cout << "FriendlyClass's private member: " << friend_class.private_member << std::endl; // 通过访问私有成员的值 // 打印通过可以访问的信息 FriendlyClassFriend friendly_class_friend; friendly_class_friend.print(); // 输出"FriendlyClass's private member: 3" return 0; } ``` 在这个例子中,我们首先定义了一个名为`FriendlyClass`的,它有一个私有成员`private_member`和一个公开成员`public_member`。我们声明了一个函数`access_private_member`和一个`FriendlyClassFriend`。`FriendlyClassFriend`是`FriendlyClass`的一个,这意味着它可以访问`FriendlyClass`的私有成员。在主函数中,我们通过访问了私有成员的值,并打印出了相关信息。 需要注意的是,使用关系需要谨慎,因为这可能会破坏封装性并导致代码难以理解和维护。通常情况下,应该尽量避免使用关系,除非有特殊的理由需要这样做。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值