一.全局函数和成员函数
1.把全局函数转换为成员函数,通过this指针隐藏左操作数
2.成员函数转换为全局函数,多一个参数
#include <stdio.h>
class Text1_1
{
public:
Text1_1(int a)
{
this->m_a = a;
}
void print()
{
printf("a = %d\n",m_a);
}
//全局函数转化为内部函数 通过this指针隐藏左操作数
int add(Text1_1 &b)
{
return (this->m_a + b.get());
}
int get()
{
return m_a;
}
private:
int m_a;
};
//成员函数转换为全局函数
//多一个参数
int get(Text1_1 &obj)
{
return obj.get();
}
//全局函数
int add(Text1_1 &a, Text1_1 &b)
{
return a.get() + b.get();
}
int main()
{
Text1_1 a(10);
a.print();
Text1_1 b(20);
int c = a.add(b);
printf("c = %d\n",c);
return 0;
}
二.友元函数和友元类
#include <iostream>
using namespace std;
class Test
{
public:
// 友元函数的声明与位置、public、private等都无关
// 友元函数不是类的内部函数,是一个全局的函数
friend void test(Test *pTest);
Test(int a, int b)
{
this->a = a;
this->b = b;
}
int getA()
{
return this->a;
}
private:
int a;
int b;
};
void test(Test *pTest)
{
pTest->a = 10;
}
int main()
{
Test a(2,3);
test(&a);
cout << a.getA() << endl;
return 0;
}
友元类:
同友元函数一样,一个类可以将另一个类声明为友元类。若A类为B类的友元函类,则A类中的所有成员函数都是B类的友元函数,都可以访问B类的私有和保护成员。例如:
class A{
public:
int GetX() { return x; }
friend class B;//B类是A类的友元类
//其它成员略
private:
int x;
};
class B{
public:
void set(int i);
//其他成员略
private:
A a;
};
void B :: set(int i){
a.x = i;//由于B类是A类的友元类,所以在B的成员函数中可以访问A类对象的私有成员
}
关于友元,需要注意的点:
友元关系不能传递
友元关系是单向的
友元关系不能被继承