如何破壞C++的訪問控制
封裝,繼承和多型是物件導向的三大特徵。其中封裝是利用設定訪問控制許可權來實現的。在C++中,訪問控制許可權可以用友元、巨集和型別轉換等方法來破壞。這裡介紹一下巨集和型別轉換的方法。
首先定義一個包含私有成員的類Employee,居然沒有定義加薪的介面,擺明不想給漲工資!(employee.h)
class Employee
{
public:
Employee(int salary) : salary(salary) {}
int getSalary()
{
return salary;
}
private:
int salary;
};
既然老闆不想給加薪,只有自己動手了。首先使用巨集定義#define private public
方法(main.cpp):
#include <iostream>
#define private public
#include "employee.h"
#define private private
using namespace std;
int main()
{
Employee p = Employee(10000);
cout << "Original salary: $" << p.getSalary() << endl;
p.salary = 20000;
cout << "Current salary: $" << p.getSalary() << endl;
return 0;
}
執行結果:
Original salary: $10000
Current salary: $20000
請按任意鍵繼續. . .
另外還能用強制型別轉換reinterpret_cast
的方法。首先定義一個結構相同的類,注意把salary定義為public訪問許可權。(hacker.h):
class Hacker
{
public:
Hacker(int salary) : salary(salary) {}
int getSalary()
{
return salary;
}
public:
int salary;
};
然後使用如下方法(main.cpp):
#include <iostream>
#include "employee.h"
#include "hacker.h"
using namespace std;
int main()
{
Employee p = Employee(10000);
cout << "Original salary: $" << p.getSalary() << endl;
Hacker *h = reinterpret_cast<Hacker*>(&p);
h->salary = 20000;
cout << "Current salary: $" << p.getSalary() << endl;
return 0;
}
執行結果同樣為:
Original salary: $10000
Current salary: $20000
請按任意鍵繼續. . .
結論:
- C++的訪問許可權並不完備,可以通過友元、巨集和強制型別轉換等方法破壞。
- 參考第一條。
相關文章
- 類的訪問控制
- 控制檔案被破壞的資料庫恢復方法資料庫
- 檔案和目錄的訪問控制(2)新增訪問控制
- 如何在Mac上訪問任務控制Mac
- Swift 中的訪問控制Swift
- Mongodb訪問控制MongoDB
- Flask——訪問控制Flask
- RabbitMQ訪問控制MQ
- Nginx訪問控制Nginx
- Swift 訪問控制Swift
- C++ 訪問說明符詳解:封裝資料,控制訪問,提升安全性C++封裝
- 如何增強 Linux 核心中的訪問控制安全Linux
- Swift的訪問控制講解Swift
- Nginx 對訪問量的控制Nginx
- ABAC訪問控制模型模型
- JoomlaACL訪問控制列表OOM
- 控制檔案備份增加、破壞恢復系列實驗(上)
- 控制檔案備份增加、破壞恢復系列實驗(下)
- 《暗黑破壞神 不朽》聯訪:與網易共同開發新機制
- 控制對網站的訪問 (轉)網站
- C# 託管堆 遭破壞 問題溯源分析C#
- 資料夾損壞無法訪問. 不知道如何找到呢?
- 如何訪問Windows 10隱藏的一個控制皮膚功能Windows
- IOS - ACL (訪問控制列表)iOS
- HTTP之訪問控制「CORS」HTTPCORS
- Vue前端訪問控制方案Vue前端
- Ubuntu 增加埠訪問控制Ubuntu
- web application 訪問控制WebAPP
- 控制資料訪問(一)
- openGauss 訪問控制模型模型
- 資料庫mysql如何訪問控制?有哪些階段?資料庫MySql
- Casbin——專注、高效的訪問控制框架框架
- nginx的高階配置(5)——訪問控制Nginx
- 配置 Linux 的訪問控制列表(ACL)Linux
- weblogic控制檯訪問慢問題Web
- 006.Nginx訪問控制Nginx
- Casbin訪問控制框架入門框架
- 遠端訪問及控制——ssh