C语言基础学习

private外部访问问题

2019-03-19  本文已影响12人  qinxing

问题: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也可能被外部模块修改。

上一篇下一篇

猜你喜欢

热点阅读