0
点赞
收藏
分享

微信扫一扫

C++学习6——访问限制

大师的学徒 2022-01-20 阅读 55

public:公开的,任何人都可以访问

private:私有的,只有这个类的成员函数可以访问成员变量与成员函数

protected:保护的,只有这个类自己以及子子孙孙可以访问

#include<iostream>
using namespace std;

class A{
private:
    int i;
    int *p;    
public:
    A(){p=0;i=0;cout<<"A::A()"<<endl;}
    ~A(){if(p) delete p;cout<<"A::~A(),i="<<i<<endl;}
    void set(int ii){i=ii;}
    void f(){p=new int;}
	void g(A* q){cout<<"A::g(),q->i="<<q->i;}//可以输出q里私有的i,说明可以访问别的对象的私有的内容
    //进一步说明:private是对于类的,不是对对象的,同一个类的对象可以相互访问私有的成员变量的,private的权限限制仅仅在编译时刻,运行时刻无限制
};
int main()
{
    A* p=new A[10];
    for(int i=0;i<10;i++){
        p[i].set(i);
    }
    A b;
    b.set(100);
    p[0].g(&b);
    delete[] p;
    return 0;
}

friend:你可以声明别人是你的朋友,之后他就可以访问你的private内容了,这个别人可以是别的类,别的函数(不是类里的函数),别的类里的某个函数。

struct X;//前项声明,告诉编译器有这个东西,但不知道X具体是什么;为什么这么做呢?因为在X的定义里面,我们使用到了Y
struct Y{//为什么不是声明Y呢?因为Y有f(),编译器必须明确知道Y有没有f()
    void f(X*);
    //如果是void f(X c);则不行
};
struct X{
private:
    int i;
public:
    void initialize();
    friend void g(X*,int);
    friend void Y::f(X*);
    friend struct Z;
    friend void h();
};
void X::initialize(){
    i=0;
}
void g(X* x,int i){
    x->i=i;
}
void Y::f(X* x){
    x->i=47;
}
struct Z{
......
}

friend的授权在编译时刻

class默认private

struct默认public

举报

相关推荐

0 条评论