自给自足,只和自己家人交流——成员函数
跟邻居借东西——友元函数
成员函数
what?
把定义和原型写在类定义内部的函数
why?
因为数据的封装,用户不能直接访问私有的数据。但是可以通过类的成员函数提供的接口访问
how?
在类定义的大括号里面的
定义分为在内部和在外部:
在类内部定义:
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
double getVolume(void)
{
return length * breadth * height;
}
};
在类的外部定义(使用范围解析运算符::)
double Box::getVolume(void)
{
return length * breadth * height;
}
备注?
成员函数包括:构造函数、析构函数、拷贝构造函数、赋值运算符重载函数、取地址操作符重载、const修饰的取地址操作符重载
友元函数(friend)
what?
如果类A中的函数要访问类B中的成员,那么类A中该函数需是类B的友元函数。
即:允许类B的函数去访问类A的私有变量和保护变量,从而使AB两个类共享同一函数。
why?
作用是实现了类之间的数据共享,减少了系统开销,提高效率
how?
声明类 ClassTwo 的所有成员函数作为类ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:
friend class ClassTwo;
两者的比较
显而易见,友元函数破坏了类的封装性,所以应尽量使用成员函数,不得已再使用友元函数