为什么这个成员函数可以访问一个私有向量

问题描述:

现在我在这里有一个代码片段,我试图理解。我认为只有朋友函数可以访问私有成员变量,那么为什么方法'grad'能够在这里访问'a'来获得它的大小呢?为什么这个成员函数可以访问一个私有向量

#include <vector> 

using namespace std; 

class Polynom{ 
    private: 
    vector<double> a; 

    public: 
    Polynom(const vector<double>& v): a(v) {} 

    int grad() { return a.size()-1; } 
}; 

int main() 
    { 
    return 0; 
    } 
+8

grad函数属于Polynom类。类的成员函数可以访问同一类的私有变量。 – Harrand

+2

一个类的所有成员都可以访问该类的所有其他成员。 – NathanOliver

+2

实际上,'private'主要存在于这个用例中:限制对其他成员函数的访问。 'friend'只是一个构造,可以将它扩展到非成员函数。 –

问问自己,如果私人会员访问权限使其他人无法进入访问,那么私人领域的重点是什么?你声明了一个潜在复杂的对象,然后从字面上不能做任何事情?你有一个私人区域可以与自己进行交互,但是它不会对任何面向公众的功能产生任何影响?你使用私人结构作为中间人写公共领域,然后使用?这些情景都没有什么意义。访问修饰符可以保护类不受外部影响,但OOP模型假定程序员将在课堂上自己照顾自己。 值得注意的是,有一种情况下私人成员不能被访问:继承。基类私有变量存在于派生类中,但不能直接引用。要清楚的是,这些是基类的私有变量。子类有它自己的私有范围,它可以正常声明和访问。