访问限制

2023/07/29 C++ 共 1019 字,约 3 分钟

访问权限描述符

public

任何人都可以访问.

private

只有自己可以访问,即只有自己的成员函数才能访问.

描述的是谁的权限

访问描述符描述的是类与类之间的访问性,而不是对象和对象的访问性.

#include<iostream>
using namespace std;

class A
{
private:
    int a;
public:
    A(int a);
    void SetOneA(A *pa, int a);
    void PrintSelf();
};

A::A(int a)
{
    this->a = a;
}
void A::SetOneA(A *pa, int a)
{
    pa->a = a;
}
void A::PrintSelf()
{
    cout << this->a << endl;
}

int main(int argc, char const *argv[])
{
    int i = 0;
    A *pa = new A(1);
    pa->PrintSelf();
    A b(2);
    pa->SetOneA(&b, 3);         //利用a对象,把b对象的私有字段设置成3
    pa->PrintSelf();
    b.PrintSelf();
    return 0;
}


友元 friend

可以声明其他类,函数为自己的朋友,开放自身的私有数据给别人(友元)访问.


struct X;

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

struct X
{
private:
    int i;
public:
    void init();
    friend void g(X*, int);     //global friend
    friend void Y::f(X*);     //struct member friend
    friend struct Z;     //Entire struct is a friend
    friend void h();     //fun is a friend
};

void X::init()
{
    i = 0;
}

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

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

struct Z
{
private:
    int j;
};

int main(int argc, char const *argv[])
{
    return 0;
}

class&struct

class中默认成员为private,struct中默认成员为public

父子类

在子类使用public方式继承父类时,不能访问父类private的成员,只能访问父类public和protected的成员对象。

原课程

浙江大学 C++ 访问限制

文档信息

Search

    Table of Contents