私有成员:私有成员变量,私有成员函数;
私有成员函数的调用时机
私有成员函数的调用时机仅发生在当前类内部,最终由当前类的其他公有成员函数所调用,因为私有成员对其他类不可见。
所以,一个不被当前类所调用的私有成员函数,是无意义的。这点体现在 Eclipse 这么优秀的 IDE 中即是:对一个不被本地调用的私有成员函数,会提示如下的警告信息:
The method foo() from the type Base is never used locally
对私有成员变量和私有成员函数的认识
私有函数的存在,避免冗余代码;
私有成员变量和私有成员函数一样只开放给自己,所谓只开放给自己,
对私有成员函数而言,私有成员函数仅供当前类的其他私有成员函数以及公有函数调用,所以在设计与实现一个类时,应当优先设计一个类的私有成员函数,然后是依赖于该私有成员函数的其他函数。
对私有成员变量而言,即是除了当前所属类,其他类无权访问,哪怕是其子类尽管持有该成员。
那么如何在实现子类的构造函数时,实现对父类私有成员的赋初值,是私有成员变量,而非 protected 成员变量;
class Base
{
public:
Base(int x, int y) :_x(x), _y(y){}
private:
int _x;
int _y;
};
class Derived :public Base
{
public:
Derived(int x, int y) :Base(x, y){}
};
私有成员函数 ==》 让公有成员函数的生活更美好
equal 与 operator==、operator!=
class A { public: bool operator==(const A& a) const { return equal(a); } bool operator!=(const A& a) const { return !equal(a)} private: bool equal(const A& ) const {...} };
print(std::ostream& ) 与 std::ostream& operator<<(std::ostream& os, SomeClass)
class Dataset { public: friend std::ostream& operator<<(std::ostream& os, const Dataset& ds) { ds.print(os); return os; } private: void print(std::ostream& os) { // 一直往 os 中写东西 os << "" << ...; } };