我需要協調&問題一個唯一的順序數字標識符(1,2,3 ...等)爲對象從特定祖父對象所產生的實例。C++保持計數時,全局變量是不恰當的
我正在使用Microsoft編譯器創建一個C++ DLL,並且其中所有變量都封裝在對象中;全局變量在這種情況下不是一種選擇,實際上正在設計中。
我試過以下方法來解決問題,並發現它不可能通過前向聲明來訪問另一個對象的成員函數(NB代碼來說明我想要實現的,它不會編譯到期不正確的使用提前聲明的訪問成員函數):
祖父類:
//GrandParent
class GrandParent
{
public GrandParent(){}
int addParent()
{
Parent *par = new Parent(this);
return 0;
}
int incrementGrandChildIDNumber()
{
return grandChildIDNumber +=1;//increment
}
private:
int grandChildIdNumber;//keep count. This NEEDS to be encapsulated. Cannot be a
//global variable as there will be multiple instances of GrandParent each counting
//and labeling it's own grand children.
};
父類:
//Parent
class GrandParent;//forward declaration
class Parent
{
public Parent(GrandParent *ptrToGrandParent): ptr2GP(ptrToGrandParent){}
addGrandChild()
{
id = ptr2GP->incrementGrandChildIDNumber();//but forward declaration does not
//give access to GrandParent member functions, right??
GrandChild grndChld = new GrandChild(id);
return 0;
}
private:
int id;
GrandParent *ptr2GP;
};
如GrandChild類:
//GrandChild
class GrandChild
{
public:
GrandChild(const int &id):idNumber(id){}
private:
int idNumber;
};
我簡單的問題,在現實中每個類是更長的時間,並在自己的頭文件中定義。
我的問題是:如果向前聲明不工作和全局變量沒有在這個項目有什麼其他選項可用來協調發行ID號到孫對象合適嗎?
當在現實中應用時,會有多個GrandParent實例,因此它們都將引用* same * static變量?我對嗎?我需要每位祖父母保持獨特的計數,不包括來自其他祖父母的GrandChildren。 – GoFaster
因此,將'GrandParent :: grandChildIdNumber'更改爲非靜態變量,但不要忘記在GrandParent構造函數上進行初始化。 –