定义类X、Y、Z,函数h(X *),满足:类X有私有成员i,Y的成员函数g(X *)是X的友元函数,实现对X的成员i加1;类Z是类X的友元类,其成员函数f(X *)实现对X的成员i加5;函数h(X *)是X的友元函数,实现对X的成员i加10。在一个文件中定义和实现类,在另一个文件中实现main()函数。
博主在XYZ.h头文件中声明类与函数,在XYZ.cpp中定义和初始化,main.cpp中执行。
题目要求两个文件,则可以将类与函数的声明,定义和初始化放在一个.pp文件中,在主函数使用时调用。
XYZ.h
#pragma once
class X;//声明一个类X,因为Y要引用它,但这里还没有定义X
class Y
{
public:
void g(X*p);
};
class X
{
public:
X(int _a);
friend void Y::g(X*p);
friend void h(X*p);
friend class Z;
int getI() { return i; }
private:
int i;
};
class Z
{
public:
void f(X*p);
};
void h(X*p);
XYZ.cpp
#pragma once
#include "XYZ.h"
X::X(int a)
:i(a)
{
}
void Y::g(X*p)
{
p->i += 1;
}
void h(X*p)
{
p->i += 10;
}
void Z::f(X*p)
{
p->i+= 5;
}
main.cpp
#include <iostream>
#include "XYZ.h"
using namespace std;
int main()
{
X x(1);
Y y;
Z z;
cout <<x.getI() << endl;
y.g(&x);
cout << x.getI() << endl;
z.f(&x);
cout << x.getI() << endl;
h(&x);
cout << x.getI() << endl;
return 0;
}
运行结果: