C 類的私有成員變數和函式的隱藏

2021-09-12 02:14:07 字數 2201 閱讀 7971

我們在寫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...