关于C++友元的一点问题,盼大佬给予一点宝贵的见解
想请问一个问题:
1,为什么我A类已经声明为B类的友元类了,但是A类利用友元函数定义重载+号运算符方法的时候,仍然说B类的数据段是私有的;
2,按我的理解来说,A类既然是B类的友元类了,B类的所有成员不是都能访问吗?
3,自己尝试寻找了以下几种答案,但仍然比较模糊,似是而非,希望大佬能给我一个较为合理明确的解答,谢谢您!
i.友元在未实例化的时候不会识别,但A在重载那个友元的加号时候却妄想访问B的实例化对象的数据段;(疑问,这个解答感觉比较靠近答案,但是存在的先后顺序我感觉很怪:1,既然没实例化的时候不会看友元,但是那个重载的地方也是友元呀;2,我最前面已经声明了B和A的类,但定义时的先后顺序结果却不一致,一个是非法地访问私有字段,另一个直接说这个类B没找到???非法???)
ii.有种方法是在类外定义这个重载地友元函数,不过我想知道这种在类里面定义的方法到底可不可以,确切的说就是,我在B中声明了A是B的友元,A内部的操作是不是可以无条见地访问B,如果可以,我这个code该如何修改呢?
#include <iostream>
using namespace std;
class A;
class B;
class B {
int l, r;
public:
friend class A;
B(int l, int r):l(l), r(r){}
void display() {
cout << "B : " << l << " " << r <<endl;
}
};
class A {
int l, r;
public:
A(int l, int r):l(l), r(r){}
int operator + (const int C) { // 1
return this->l + this->r + C;
}
int operator + (const A& B) { // 2
return this->l + this->r + B.l + B.r;
}
friend int operator + (A& a, B& b) { // 3
return a.l + a.r + b.l + b.r;
}
void display() {
cout << "A : " << l << " " << r <<endl;
}
};
int main() {
A p1(1, 2), p2(3, 4);
B p3(5, 6);
p1.display();
p2.display();
p3.display();
cout << p1 + 1 << endl; //找相应的运算符重载列表1
cout << p1 + p2 << endl; //找相应的运算符重载列表2
}
...全文
相关推荐
c++ demo,全局友元类的实现
标签“c++ demo global friend class”进一步强调了我们要讨论的是C++中的全局友元类的实践应用。在实际项目中,全局友元类通常用于解决以下问题:1.
关于c++友元.ppt
本资源主要讲解C++语言中的友元概念,包括友元函数和友元类。友元在C++编程中扮演着特殊的角色,它允许非类成员函数或类访问类的私有和受保护成员,从而增强了程序的灵活性和效率。以下是详细的解释:1.
关于C++友元类的实现讲解
"C++友元类的实现讲解"C++中的友元类是一种特殊的类,它可以访问另一个类的私有成员。友元类的实现可以分为两种方式,一种是通过友元函数实现,另一种是通过友元类实现。
C++友元举例
本节我们将通过具体的例子深入探讨C++中的友元。首先,理解友元的概念是至关重要的。在C++中,一个类可以声明另一个类或函数为其友元。
cpp代码-C++:类05__友元类,友元函数
总之,C++中的友元类和友元函数是实现特定编程需求的重要工具,它们允许类之间打破封装,进行更灵活的数据访问。然而,使用时需谨慎,以保持代码的可维护性和安全性。


