C++ 访问友元函数
需要从main访问类_D中声明的函数friend的帮助。 指导继续进行C++ 访问友元函数,c++,private-members,friend-function,C++,Private Members,Friend Function,需要从main访问类_D中声明的函数friend的帮助。 指导继续进行 /* Main.cpp */ #include <iostream> #include "types.h" #include "Class_A.h" #include "Class_C.h" int main() { cout << " Project started" << endl; /* Creatin
/* Main.cpp */
#include <iostream>
#include "types.h"
#include "Class_A.h"
#include "Class_C.h"
int main()
{
cout << " Project started" << endl;
/* Creating Obj of Class A */
A obj1;
/* Accessing Funcition of Class C through A */
obj1.SetFuncA();
/* How to access GetFuncD(); from main*/
cin.get();
return 0;
}
/* types.h */
#ifndef TYPES_H
#define TYPES_H
#include <iostream>
#include <stdlib.h>
#define ENAB_FRIEND_CLASS(x) friend class x
using namespace std;
typedef unsigned int U32;
typedef unsigned short U16;
typedef unsigned char U8;
typedef int S32;
typedef short S16;
typedef char S8;
#endif
/* Class_A.h*/
#ifndef CLASS_A_H
#define CLASS_A_H
class D;
class A {
private :
int i;
int j;
public :
A(); /* Default Constructor */
~A(); /* Default Destructor */
void SetFuncA();
int GetFuncA();
friend int D::FGetFuncD(D &obj);
protected:
};
#endif
/* Class_D.h */
#ifndef CLASS_D_H
#define CLASS_D_H
class D {
private :
int i;
int j;
public :
D(); /* Default Constructor */
~D(); /* Default Destructor */
void SetFuncD();
int GetFuncD();
void FGetFuncD(D &obj);
protected:
};
void FGetFuncD(D &obj)
{
cout << "\n i " << obj.i << endl;
cout << "\n i " << obj.j << endl;
}
#endif
/* Class_A.cpp */
#include "Class_A.h"
#include "types.h"
#include "Class_C.h"
A :: A()
{
cout << "Default CTOR Called\n" << endl;
}
A :: ~A()
{
cout << "Default DTOR Called\n" << endl;
}
void A::SetFuncA()
{
int ret = 0;
cout << "\n SetFuncA " << endl;
/* Creating Object of class C in Class A*/
C Obj2;
/* Setting Private members */
Obj2.SetFuncC();
/* Calling Function of class C in Class A */
ret = Obj2.GetFuncC();
cout << " M = " << ret << endl;
/* Dynamically Allocate memory for Class C */
C *ptr = new C();
/* Accessing private members of Class C */
ptr->m =20;
/* Accessing Public Function of Class C*/
ret = ptr->GetFuncC();
cout << " M = " << ret << endl;
/* Accessing Enum */
ptr->m_bLEVEL = ptr->KN_LEVEL_1;
cout << " ENUM = " << ptr->m_bLEVEL << endl;
}
int A::GetFuncA()
{
cout << "\n GetFuncA " << endl;
}
/* Class_D.cpp*/
#include "types.h"
#include "Class_D.h"
D :: D()
{
cout << "Default CTOR Called\n" << endl;
}
D :: ~D()
{
cout << "Default DTOR Called\n" << endl;
}
void D::SetFuncD()
{
cout << "\n SetFuncD " << endl;
i = 30;
}
int D::GetFuncD()
{
cout << "\n GetFuncD " << endl;
return i;
}
/*Main.cpp*/
#包括
#包括“types.h”
#包括“A.h类”
#包括“C.h类”
int main()
{
cout友元函数不是类的成员,但可以访问类的私有和受保护成员。
因此,您的D类应更改为:
public :
D(); /* Default Constructor */
~D(); /* Default Destructor */
void SetFuncD();
int GetFuncD();
void FGetFuncD(D &obj);
致:
然后,在main中,您可以只调用FGetFuncD,而不需要实例化对象D
int main()
{
D obj2;
obj2.SetFuncD();
int i_of_obj2 = FGetFuncD(obj2); /*using GetFuncD WITHOUT calling on a D object*/
cout << "i_of_obj2: " << i_of_obj2 << endl;
cin.get();
return 0;
}
intmain()
{
D obj2;
obj2.SetFuncD();
int i_of_obj2=FGetFuncD(obj2);/*使用GetFuncD而不调用D对象*/
你到底遇到了什么问题?你使用D::GetFuncD
的方法与使用class A
的方法相同。包括class\u D.h
,创建一个D
对象,然后为它调用GetFuncD
方法。嗨!!你把成员函数和友元函数搞混了。友元函数在class\u D.h fi中声明您提到的功能是会员功能。感谢您的关注。void FGetFuncD(D&obj){cout HI mxdg!!我有一个查询..当我必须传递d类的对象时,那么friend函数的用途是什么。当我能够创建对象时,我可以使用object访问私有成员。我的查询不是创建d类的对象,然后获取任何函数调用的friend函数,我详细说明了如何将其设置为friend函数friend函数是这样的,即使它不是成员函数,您也可以访问它。无论哪种方式,您都需要类的实例。例如,可以使用friend函数来比较两个D类对象,看看它们的i值是否相同。friend bool CompareI(D&obj1,D&obj2){return(obj1.i==obj2.i)}如果这不是一个friend函数,我们将无法访问i成员变量。这会让事情更清楚吗?嗨,mxdg!!这很有帮助!!
int main()
{
D obj2;
obj2.SetFuncD();
int i_of_obj2 = FGetFuncD(obj2); /*using GetFuncD WITHOUT calling on a D object*/
cout << "i_of_obj2: " << i_of_obj2 << endl;
cin.get();
return 0;
}