美文网首页C语言基础学习
private外部访问问题

private外部访问问题

作者: qinxing | 来源:发表于2019-03-19 22:00 被阅读12次

    问题:private可以防止其他模块进行访问,但如果利用指针,是否可以在其他模块获取到private的数据?

    实验

    #include "pch.h"
    #include <iostream>
    using namespace std;
    class A {
    public:
        A() {
            a2 = 3;
            a3 = 4;
        }
        int* fun3() {
            cout << "a3=" <<a3 << endl;   //正确,类内访问
            return &a3;
        }
        int* fun2() {
            cout << "a2=" << a2 << endl;   //正确,类内访问
            return &a2;
        }
    
    protected:
        int a2;
    private:
        int a3;
    };
    int main() {
        A itema;
        int* mytest;
        //不能直接获取
        //cout << "直接获取private值a3=" << itema.a3 << endl;
        mytest = itema.fun3();
        cout << "通过指针获取private值a3="<<*mytest << endl;
        *mytest = 1;
        cout << "对private值进行修改:";
        itema.fun3();
    
        mytest = itema.fun2();
        cout << "通过指针获取protected值a3=" << *mytest << endl;
        *mytest = 1;
        cout << "对private值进行修改:";
        itema.fun2();
        return 0;
    }
    
    

    小结

    • private数据外部不能直接获取
    • private数据如果把地址传出来,可以在外部进行读取和修改
    • protected和private都可以利用指针在外部进行读取和修改

    因此private不是万能的,同样可以走后门,进行修改,用同样的方法,我们还可以引出形参指针的地址等;当我们写程序时,也要注意private也可能被外部模块修改。

    相关文章

      网友评论

        本文标题:private外部访问问题

        本文链接:https://www.haomeiwen.com/subject/xzeomqtx.html