-
其實在呼叫類的成員函式時,預設會把這個的值傳遞到第乙個引數中,主要用於訪問類的成員變數。
如果在成員函式的實現中沒有引用任何成員變數(為物件分配的空間),則使用 null 指標呼叫它們不會出錯,因為您沒有在實現中使用它們。 例如:
class b
public:
void test()
printf("它在執行時不會關閉核心");
void test2()
printf("當您執行以下 ** 時,將報告錯誤,因為對成員變數的引用基於 0 位址");
a = 100;
private:
int a;
int main()
b *lpb = null;
lpb->test();
lpb->test2();
return 0;
-
因為這兩個函式是靜態的,所以你的類的物件只有 8 個位元組,pb->fun() 在編譯時會為你替換它,所以它不會引起錯誤。
而且,即使這沒有報告錯誤,這個錯誤也違背了物件導向的最初目的,很高興知道,但這不是必需的,因為如果 fun 使用成員變數,後果將是崩潰。
-
請不要混淆。
所有函式在程式編譯連線時都放在一起,稱為區域,無論它們是靜態函式還是非靜態函式,都不存在"構造類的物件時(第一次構造物件時),會為成員函式(非靜態成員函式)分配乙個塊空間。",但是當程式載入時,所有 ** 都已經存在於記憶體空間中。 呼叫函式時,僅為函式中使用的區域性變數分配空間。
建立物件時,編譯系統僅為物件中的成員資料(成員變數)分配記憶體空間,即使存在以下情況:
#include
using namespace std;
class a
int main()
但如果如下,那就錯了:
#include
using namespace std;
class a
-
因為如果乙個類包含自己類的物件,就會出現無限初始化的問題。
要構造乙個類的物件,你需要在呼叫建構函式之前構造它自己的類的物件。 構造其自身類的物件時,必須首先構造其自己的物件,然後呼叫其建構函式......
-
問題 1:
問題 2:使用 -> 訪問指標訪問資料。 如果你必須的話。 要訪問,您可以這樣寫:(*p[0])data
正確的 ** 應如下所示:
#include
using namespace std;
class a
class b
b::b()
void b::f()
int main(void)
-
方法如下:
你原來的程式只定義指標,不例項化類的指標,直接使用指標不帶例項化來訪問未建立的物件,當然是不能執行的。
p[0] 等價於 *(p+0),它不再是指標型別,在本例中,它表示物件陣列 a 的第乙個位置。
-
是的,但間接的。 請看下面的例子。
#include
using std::cout;
using std::endl;
class a{
int data;
public: a(int i):data(i){cout<<"new"cout
-
若要訪問非靜態成員,靜態成員函式必須使用用法物件作為引數。
-
你需要定義乙個類,然後將類指標指向該類的位址,該位址也可以初始化為 null,但 null 指標只能呼叫不涉及類成員變數的類成員函式。
示例:包括
using namespace std;
class test
int get()
test():a(1),b(2){}
public:
int a,b;
int main()
注意:初始化為 null 的類指標可以安全地呼叫不涉及類成員變數的類成員函式而不會出錯,但是如果在類成員函式中呼叫類成員變數,就會發生錯誤,既然可以使用賦值給 null,那麼未初始化的類指標自然也會遇到這種情況。
-
分配乙個要初始化的 null 值並沒有錯。 如果對後面的賦值語句中使用的變數有誤,請檢查該變數是否已初始化。
-
初始化必須為 null,然後在需要時指向類的例項。
-
cicmian是什麼型別,就看它是模態的還是非模態的,非模態的就是新的和完成的。 如果是檢視類,則 getActiveView 或獲取文件模板,然後找到檢視類。
-
cicmian *icmain=null;
在這裡,您將指標初始化為空,這意味著指標不指向任何內容。
如果你再打電話給他的成員,你一定會犯錯。
該過程可能應如下所示。
clcmain m;
.icmian *icmain=null;
icmain = &m;
icmain->m_>hok);
-
呵呵,空指標怎麼能直接用,它必須指向乙個實體,比如:
clcmain *lcmain = new clcmain;
或者 clcmain tmpmain;
clcmain *lcmain = &tmpmain;
-
cicmian *icmain=null;
icmain->m_>hok);在這裡死了,icmain 沒有被例項化,第乙個指向 icmain 到乙個特定的物件。
-
clcmian *lcmain;
memset(lcmain,0,sizeof(clcmian));分配空間。
再次賦值。
-
首先要做的是弄清楚你的 B 是 A 的使用者還是所有者。
1.如果只使用 a,則可以獲取指向 a 的指標的值並使用它,而無需確保它為 null。 析構時,可以將 pa 設定為 null。
2.如果 B 是 A 的所有者,並且 A 的生命週期需要由 B 管理,那麼 B 的初始函式應該初始化 A,然後初始化 A 的指標。 最好使用記憶體池來管理此記憶體空間。
銷毀時,需要解構 PA 引用的位址。
我更傾向於 2 種方法。
-
新刪除的第乙個指標,所以不能在破壞中
其次,這就是第一點的來歷。
首先,你乙個; 變數 A 的作用域結束後,它將被析構,其次,因為你的類 b 的析構函式刪除了 a,所以 a 內部的析構函式也會被呼叫。
為什麼開發者需要檢視位址是如何生成的?
人家給你位址,你只要用它,就可以判斷位址是不是空的
-
就我個人而言,我認為。
b 不應在析構函式中提供刪除 A
因為誰在 b b1(new a()) 中寫了新的 a(),那麼這裡的 a 應該由誰發布。
B 沒有義務知道 A 是在堆中還是在堆疊中,也無權在未經許可的情況下釋放 A
其實這是乙個關於變數型別和變數函式的簡單問題,我覺得應該這樣解釋:首先,變數定義的初衷是利用我們定義的變數來滿足我們程式的需要,所以,上面你定義了變數a,那麼後面,你會用這個變數來做一些運算, 大多數情況下,它是要初始化的,所以,給出乙個對應型別的值來初始化變數,這樣以後就可以使用一些操作了, 其次,理解那句話:“你要 a 表示 5,所以你要把 a 的值賦值給 5”,其實就是變數 a 的初始化過程, 其中 a 是 int(整數),對應初始值 5,表示如下: >>>More
在白癜風患者的飲食中,很多海鮮是不可食用的,但有些海鮮如貝類,如蛤蜊、牡蠣等,是可以食用的,所以患者可以吃一些這些食物,但不要吃太多。 建議:全穀物具有預防疾病的作用,可以使人更健康,幫助身體排毒等功效,其中含有多種營養價值也非常高,對於需要補充酪氨酸和礦物質的白癜風患者來說,全穀物是乙個不錯的選擇。
比如三國殺就是邊玩邊學戰術,我覺得這個遊戲還是很不錯的,而且你也可以玩一些卡牌遊戲,比如英雄,我覺得他們的遊戲也能讓你從中學到很多策略。 它仍然很有趣。 <>