量化交易之C++篇 - 友元函数、友元类、友元成员函数
原创
©著作权归作者所有:来自51CTO博客作者ErwinSmith的原创作品,请联系作者获取转载授权,否则将追究法律责任
// 友元函数
class B;
class A {
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
private:
friend void func(const A& aObj, const B& bObj);
void privateFunction() const {
cout << "A privateFunction()" << endl;
};
};
class B {
public:
B() {
cout << "B()" << endl;
}
~B() {
cout << "~B()" << endl;
}
private:
friend void func(const A& aObj, const B& bObj);
void privateFunction() const {
cout << "B privateFunction()" << endl;
};
};
void func(const A& aObj, const B& bObj) {
aObj.privateFunction();
bObj.privateFunction();
}
int main() {
func(A(), B());
return EXIT_SUCCESS;
}
// 友元类
class B;
class A {
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
private:
friend class B;
void privateFunction() const {
cout << "A privateFunction()" << endl;
};
};
class B {
public:
B() {
cout << "B()" << endl;
}
~B() {
cout << "~B()" << endl;
}
void someFunc(const A& aObj) {
aObj.privateFunction();
}
};
int main() {
B().someFunc(A());
return EXIT_SUCCESS;
}
// 友元成员函数 A.h
#ifndef CLIONTEST_A_H
#define CLIONTEST_A_H
#include <iostream>
using namespace std;
#include "B.h"
class A {
public:
A();
~A();
private:
friend void B::func(const A& aObj);
void privateFunction() const;
};
#endif //CLIONTEST_A_H
// 友元成员函数 A.cpp
#include "A.h"
A::A() {
cout << "A()" << endl;
}
A::~A() {
cout << "~A()" << endl;
}
void A::privateFunction() const {
cout << "A privateFunction()" << endl;
};
// 友元成员函数 B.h
#ifndef CLIONTEST_B_H
#define CLIONTEST_B_H
#include <iostream>
using namespace std;
#include "A.h"
class A;
class B {
public:
B();
~B();
void func(const A& aObj);
};
#endif //CLIONTEST_B_H
// 友元成员函数 B.cpp
#include "A.h"
#include "B.h"
B::B() {
cout << "B()" << endl;
}
B::~B() {
cout << "~B()" << endl;
}
void B::func(const A& aObj) {
aObj.privateFunction();
}
// 友元成员函数
#include "A.h"
#include "B.h"
int main() {
B().func(A());
return EXIT_SUCCESS;
}