1樓:春秋代序
友元函式可不可以呢。將類B的成員函式宣告為類A的友元函式,這樣的話比整個類宣告為友元類更安全一點。
現在初學c++的大學生應該都會想到教材的友元成員函式這種簡單方法吧,不知道樓主是不是這個意思,如果樓主是所有友元方法都不想用,那就打擾了
2樓:陳俊皓
紙上談兵的方法是,讓類的乙個公共成員函式返回這個類的乙個私有資料成員的引用(引自Visual C++ 2008大學教程第二版 P418)。
3樓:
linux kernel source 裡面有乙個macro叫container_of,你可以參考一下裡面如何普遍地計算偏移量
4樓:林杰
既然是私有變數,就是不想讓其它類訪問,這是C++中對類的私有變數的定義。
你現在已經有需求訪問A的私有變數了,正確方法是:
把類A中的變數宣告為Public。
新增公有方法。
其它的方法都會對程式的可理解性、可維護性造成各種困擾,非正途。
5樓:Tim Shen
// 喂喂我只是在開玩笑啊= =
#define private public#include
#undef private
6樓:白如冰
按照偏移量計算並不是個好辦法,假如類的成員有不同的資料型別,那麼必然會有問題
所以稍微比較正常的方法是重新定義乙個類,所有成員都和前乙個一樣,不過訪問許可權都是public
再把指標reinterpret_cast一下就好這種方法只要這兩個類在相同的模組,使用相同的編譯器、相同的編譯選項進行編譯,一般是不會有問題的
class A
privateint m_xdouble m_y;
};class PA;然後
A *p1 = new A;
PA * p2 = reinterpret_cast(p1);
p2->m_y;
但是這個方法依然很二逼,因為這個問題本來就很扯淡屋子有門,我可以教你怎麼砸牆,但是牆塌了你被埋了不是我的事
7樓:
要不要用和能不能是兩回事
classA;
intmain
(int
argc
,char
*argv
)私有變數也只是在編譯時不能被非友元類訪問用位址訪問就好了
不過比較麻煩,也容易出問題
在有虛函式的時候還需要考慮虛表的大小
所以還是用友元類吧
c 中如何給類的私有成員賦值?
zhLzm 最好的是通過建構函式給類的私有成員進行初始化 可以有多種初始化建構函式 如果需要在操作中設定某個私有變數基於C 類的封裝特性,最好編寫一個函式去修改需要改變的成員產量。 王祺 假設你的類在a.h中 define private public include a.h undef priva...
C 中類的資料成員(data member)能出現未初始化(uninitialized)的狀態嗎?
1.如果在乙個函式類定義,那麼在這兩個類裡的資料成員都未初始化,都是不確定的值。如果是在全域性空間定義,那built in type就是預設值,類就是預設構造的。你可以自己列印出來看看 2.是不是 class type 在進行預設初始化的時候遞迴呼叫父類的建構函式,而且類中的資料成員也按照規則進行初...
C 在類中能定義本身型別的成員嗎?
番茄.go 至少有兩種情況是允許的。指標靜態成員變數 Member.cpp include classA AA a int main 執行 g Wall O2 o Member Member.cpp Member An object of class A.An object of class A.A...