![](/img/trans.png)
[英]Unable to delete Node in Binary Tree which have two children in CPP. I've pasted the code below and highlighted out the error part
[英]Nested object creation in cpp. What is the function call sequence in pseudo code below?
這是一些代碼,我不理解某些概念。 請幫忙!
現在在下面的代碼中,當我創建some_obj1並嘗試訪問some_obj2中的表時,是否可以訪問internal_table? 它創建了嗎?
我感覺不會,因為我在some_obj1的默認構造函數中什么也不做,也沒有在some_obj2的默認構造函數中創建它。
class some_obj1 {
public: // Updated
some_obj2 table; // table is a vector of int pointers.
some_obj1() {
//DO Nothing
}
}
class some_obj2 {
public: // Updated
std::vector<int *> internal_table;
some_obj2(){
internal_table.push(new int[10]);
}
}
main () {
some_obj1 make_a_object;
//Use the object created for some task.
// Access the internal_table in some_obj2. Will I be able to access it? is it created?
}
在構造函數的開頭,所有成員均已構造-默認構造(如果具有默認構造函數)或未初始化(如果它們屬於Plain-Old-Data(POD)類別),例如int或指針。
請注意,如果您未聲明默認的構造函數,則將自動獲得類和結構的默認構造函數。 這也將使用其默認構造函數正確構造您的類類型成員。
如果您不想默認構造某些東西(或者您不能,因為它可能沒有默認構造函數),則應在初始化器列表中對其進行初始化。
您具有此處使用的簡單組成規則。
您要做的第一件事是:
some_obj1 make_a_object;
事物創建的順序:
std::vector<int *> internal_table; //because some_obj2 will needs it
some_obj2 table; //because some_obj1 needs it
some_obj1 make_a_object; //is now finally ready
易於檢測是否使用調試器。 3行只是描述了對象在創建時的完成順序,它沒有顯示執行順序,因為當然some_obj1 make_a_object首先執行。 關鍵是該代碼首先觸發其他事物的創建,當此事物完成時,對some_obj1 make_a_object的調用將完成。
這段代碼也值得懷疑:
internal_table.push_back(new int[10]);
我認為只有一個元素,數組中的第一個元素將被推到向量上。
是的,您可以做您打算做的事,但您需要修復語法和其他問題,例如
1)不為構造函數聲明訪問說明符將導致將其聲明為private
,這將不允許創建其對象,該對象是單例設計模式的基礎。
2)沒有稱為push
方法,STL中為向量提供了push_back
。
3)類定義應以;
結尾;
4)您將收到一個錯誤,指出沒有類型some_obj2
可以解決此問題,您應該執行前向聲明或遵循序列。
#include <iostream>
#include <vector>
using namespace std;
class some_obj2 {
std::vector<int *> internal_table;
public:
some_obj2(){
internal_table.push_back(new int[10]);
}
};
class some_obj1 {
some_obj2 table; // table is a vector of int pointers.
public:
some_obj1() {
//DO Nothing
}
};
int main () {
some_obj1 make_a_object;
//Use the object created for some task.
// Access the internal_table in some_obj2. Will I be able to access it? is it created?
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.