访问限制

  • 在前面说到面向对象原理的时候提到访问限制,即外部操作不可以访问类内的成员而只能访问类给外部的接口(或者说“服务”)。
  • 这主要通过三种不同的访问属性实现,下面将再详细的介绍一下访问属性相关的细节。

Setting limits

  • 保证使用类的程序员不能随便修改类内部的数据。
  • 保证维护类的程序员可以修改类内的代码而不导致影响到使用类的代码。

C++ 提供了三种类型的访问属性

  • public
    public 是公开的,任何人都可以访问。
  • private
    private 是私有的,只有这个类内的成员函数可以访问。
  • protected
    protected 是受保护的,只有这个类内的成员函数和这个类的子类可以访问。

特别的,同一个类内的对象可以互相访问私有的成员变量。

Friends

  • 类可以声明别的类、别的类内的函数、别的函数是一个友元类/友元函数。
  • 友元对象可以访问类内私有成员。

如下定义:

//声明 X
struct X;

struct Y
{
  void f(X*);
};

struct X//定义 X
{
  private:
    int i;
  public:
    void initialize();
    friend void g(X*, int);//g是一个友元函数
    friend void Y::f(X*);//Y类内的f函数是一个友元函数
    friend struct Z;//Z是友元类
};

//所有友元类和友元函数虽然不属于 X 类,但是他们是 X 的友元,所以他们都可以访问 X 的私有成员 i

void g(X* x, int val)
{
  x -> i = val;
}

void Y::f(X* x)
{
  x -> i = 666;
}


int main()
{
  X a;
  Y b;
  g(&a, 233);
  b.f(&a);
  //以上两句如果去掉友元声明,则是不合法的

  return 0;
}

Struct 与 Class

  • Struct 默认为 public,Class 默认为 private,除此之外没有区别。

我们不建议在 C++ 中使用 struct,除非我们只需要几个简单的数字集合。

posted @ 2023-11-08 13:31  ZTer  阅读(14)  评论(0编辑  收藏  举报