簡體   English   中英

是否可以訪問班級的私人成員?

[英]Is it possible to access private members of a class?

是否可以在c ++中訪問類的私有成員。

如果您沒有朋友功能,並且您無權訪問類定義

你的意思是使用一些指針算法來獲得訪問權限? 這是可能的,但絕對是危險的。 再看看這個問題: 訪問私人會員

我覺得有一些像這樣的舊學校伎倆:

#define private public
#include "header.h"
#define private private

但是你強烈勸阻我這樣做(我已經很快就讀到了C ++標准中關於這一點的說法) - 如果你想閱讀更多關於谷歌的信息“#define private public”

好吧,我可能會說rubish,但我認為你可以嘗試定義一個“twin”類,其中包含與要修改的類相同的成員但是使用不同的公共/私有修飾符,然后使用reintepret_cast將原始類轉換為您的類可以訪問私人會員。

它有點hacky ;-)

一些代碼來解釋這個想法:

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

在代碼中的某個地方:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

編輯:所以像之前已經寫過的人一樣,這可能會有效,但標准並不能保證變量的順序與public和private修飾符一樣

即使有可能通過一些討厭的黑客 - 見前面的帖子 - 你也不應該這樣做。

封裝存在是為了一個非常好的目的,並且將類成員設置為私有意味着開發人員不打算任何人亂搞該成員。 那應該意味着

“您無需訪問此成員即可將公共接口用於其完整的預期范圍”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM