刚刚阅读了有关友元函数的内容,我正在尝试使用 B 类中的友元函数“Print”访问 A 类中的私有变量“number”。我正在使用 Visual Studio。我的代码的编译给了我很多不同的错误,例如:
C2011:'A':'class'类型重新定义
C2653: 'B' : 不是类或命名空间名称
请对我有耐心,并展示实现我的目标的正确方法。
这是我的文件
啊:
class A
{
public:
A(int a);
friend void B::Print(A &obj);
private:
int number;
};
A.cpp:
#include "A.h"
A::A(int a)
{
number=a;
}
B.h:
#include <iostream>
using namespace std;
#include "A.h"
class B
{
public:
B(void);
void Print(A &obj);
};
B.cpp:
#include "B.h"
B::B(void){}
void B::Print(A &obj)
{
cout<<obj.number<<endl;
}
主要.cpp:
#include <iostream>
#include <conio.h>
#include "B.h"
#include "A.h"
void main()
{
A a_object(10);
B b_object;
b_object.Print(A &obj);
_getch();
}
...其次你可能需要一个类的前向声明B
in the A.h
引用的头文件B
作为一个朋友:
#ifndef _A_H_
#define _A_H_
class B;
class A
{
friend class B;
};
#endif
UPDATE
我目前不太确定是否可以将成员函数声明为友元,我会看看。
无法创建成员函数friend
声明,您可以将全局函数或整个类声明为友元,另请参阅:C++ 参考,友谊和继承 http://www.cplusplus.com/doc/tutorial/inheritance/.
一般来说,这不是一个好的设计理念friend
根本没有,因为它将课程紧密地结合在一起。更好的解决方案是耦合接口(无论如何都不需要公开可见)。
在极少数情况下,这可能是一个很好的设计决策,但这几乎总是适用于内部细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)