类私有成员变量突破类的限制被外部调用
来源:互联网 发布:sqlyog导入数据库 编辑:程序博客网 时间:2024/06/01 21:53
主要思想:通过公有成员函数将私有成员变量地址传出去,在外部取得该地址,然后通过外部指针修改此地址的值,则此私有成员变量的值也改变了,突破了对象及类成员函数调用私有成员变量的限制,同理,成员函数的地址如果被外部获取(例如使用模板时),则可以突破对象,调用此成员函数。
对策:一般不应把私有成员变量地址或引用及成员函数的地址做为成员函数返回值,防止被外部获取。
以下代码用QT编写,其他平台类似。
mainwindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QDebug>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); int* ptest(); void display(); ~MainWindow();private: Ui::MainWindow *ui; int test;};#endif
mainwindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); test=5;}int *MainWindow::ptest(){ return &test;}void MainWindow::display(){ qDebug()<<test;}MainWindow::~MainWindow(){ delete ui;}
main.cpp
#include "mainwindow.h"#include <QApplication>#include <QDebug>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); w.display(); //5 int* aa; aa=w.ptest(); qDebug()<<*aa; //5 *aa=20; qDebug()<<*aa; //20 w.display(); //20 return a.exec();}
输出:5 5 20 20
0 0
- 类私有成员变量突破类的限制被外部调用
- 类外部访问私有成员变量
- 定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数
- 类的私有成员变量和私有成员函数
- C++ 突破私有成员访问限制
- C++ 突破私有成员访问限制
- 类静态变量的赋值以及调用私有成员变量的用法
- iOS访问类的私有成员变量及私有方法
- iOS访问类的私有成员变量及私有方法
- 访问类私有成员变量
- java利用反射来调用一个类的私有方法和成员变量
- 外部类可以访问内部类的私有成员
- 在外部调用私有成员函数的方法
- Python类中的私有成员(私有函数,私有变量)
- Python类中的私有成员(私有函数,私有变量)
- 私有成员函数一定不能被外部调用吗?
- 外部如何访问私有成员变量???
- C++类的私有成员变量和函数的隐藏
- T2开发板无法连接WIFI
- VS2008远程调试
- Java线程编程中的阻塞队列容器
- 给处女的一个忠告!
- Android 发布开源项目到Jcenter
- 类私有成员变量突破类的限制被外部调用
- Redis内存优化--分配监控回收
- 统计单表中时间有重叠的数据--同一人出入院时间重叠
- Spring Boot(1)——Spring Boot简介
- [C++基础]new
- 人人都是产品经理之第二章摘要02
- leetcodeOJ 77. Combinations
- 系统知识
- 为何volatile不能保证原子性操作