【问题标题】:Why can this member function access a private vector为什么这个成员函数可以访问私有向量
【发布时间】:2017-08-16 05:09:34
【问题描述】:

现在我在这里有一个我想要理解的代码 sn-p。我以为只有友元函数才能访问私有成员变量,那为什么'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;
  }

【问题讨论】:

  • grad函数属于Polynom类。类的成员函数可以访问同一个类的私有变量。
  • 一个类的所有成员都可以访问该类的所有其他成员。
  • 实际上,private 主要存在于这个用例中:限制对其他成员函数的访问。 friend 只是将其扩展到非成员函数的构造。
  • 你应该更仔细地阅读你的 C++ 书籍,这是一个非常基本的概念。
  • 你们班没有C++教材?这太可怕了。 Here, pick one.

标签: c++ member


【解决方案1】:

问问自己,如果私有成员访问权限使该类的其余部分无法访问,那么私有字段的意义何在?你声明了一个可能很复杂的对象,然后真的对它无能为力?您有一个可以与自身交互的私有区域,但它不会对任何面向公众的功能产生任何影响?您使用私有结构作为中间人来写入您然后使用的公共字段?这些场景都没有那么大的意义。访问修饰符保护类免受外部影响,但 OOP 模型假设程序员将在类中照顾自己。 值得注意的是,有一种情况是不能访问私有成员的:继承。基类私有变量存在于派生类中,但不能直接引用。需要明确的是,这些是基类的私有变量。子类有自己的私有作用域,它可以在其中声明和正常访问。

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 2014-08-05
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2021-11-01
    相关资源
    最近更新 更多