我們在寫c++的**的時候,尤其是給三方提供庫的情況下,所提供的類標頭檔案中包含了很多的私有的變數和函式,對於呼叫和開發的人來說都是很繁瑣的一件事情,最近在寫qt**的時候發現對其私有的東西隱藏很好,仔細研究,其實就是對這個類提供乙個私有的類,然後通過巨集對這個類進行使用,非常方便。
首先定義巨集,如vc編寫的情況下可以放到stdafx.h中
template static inline t *qgetptrhelper(t *ptr)
#define q_declare_private(class) \
inline class##private* d_func() \
inline const class##private* d_func() const \
friend class class##private;
#define q_declare_private_d(dptr, class) \
inline class##private* d_func() \
inline const class##private* d_func() const \
friend class class##private;
#define q_declare_public(class) \
inline class* q_func() \
inline const class* q_func() const \
friend class class;
#define q_d(class) class##private * const d = d_func()
#define q_q(class) class * const q = q_func()
下面我提供乙個簡單的使用例子,如定義類 person,需要如下3個檔案:person.h person_p.h person.cpp
person.h
#pragma once
class cpersonprivate;
class cperson
;
person_p.h
#pragma once
#include "stdafx.h"
#include
class cperson;
class cpersonprivate
int age;
std::string name;
private:
cperson * const q_ptr;
};
person.cpp
#include "stdafx.h"
#include "person.h"
#include "personprivate.h"
#include "stdlib.h"
cperson::cperson(void)
: d_ptr(new cpersonprivate(this))
cperson::~cperson(void)
int cperson::getage()
std::string cperson::getname()
C 私有成員變數的理解
私有成員變數的概念,在腦海中的現象是,以private關鍵字宣告,是類的實現部分,不對外公開,不能在物件外部訪問物件的私有成員變數 然而,在實現拷貝建構函式和賦值符函式時,在函式裡利用物件直接訪問了私有成員變數,因而,產生了困惑 下面以具體例項進行說明 1 class ctest 1011 ctes...
C 私有成員變數的理解
然而,在實現拷貝建構函式和賦值符函式時,在函式裡利用物件直接訪問了私有成員變數,因而,產生了困惑 下面以具體例項進行說明 疑惑 為什麼第26行和第32行 可以編譯通過,而第39行和第40行 會產生編譯錯誤?1 class ctest 1011 ctest ctest int i value i 12...
如何訪問私有成員變數和函式
一說到修改 delphi 原始碼或者訪問物件的私有成員函式,很多人馬上可以說出種種危害來否定我。這種做法我也提倡,但是有時候如果可以靈活運用,可以解決由於 delphi 因為封裝不正確而帶來的問題。我在這裡分享一些技巧 1.訪問私有成員變數 如果是 protected 的變數,可以用如下方法訪問 t...