2013-03-07 31 views
0

我有一個由兩部分組成的問題。首先,我明白C++僅提供了類級數據封裝,這意味着同一類的所有對象都可以訪問彼此的私有成員。我知道這樣做的原因,但也發現了一些鏈接這似乎違背了這一點,這意味着我可以做以下(即http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/):使用C++實例級封裝

class testclass { 
    private: 

    // Below would be an instance-level variable, and new memory for it is set aside 
    // in each object I create of class testclass 
    int x; 

    // Below would be a class-level variable, memory is set aside only once no matter 
    // how many objects of the same class 
    static int y; 
} 

我想這樣做實際上是使這項工作,即,我想在每個實例(這是我的第二個問題)中私人地定義一個變量類。由於上面的代碼片段似乎沒有達到這個目的,是否有解決方法,我可以使用它來創建私人個別對象的數據?謝謝!

編輯:

的確,我仍然在學習面向對象的基礎知識。我將使用無處不在的汽車示例來展示我想要做的事情,我相信這肯定是一件常見的事情。我歡迎如何重新考慮任何建議:

class car { 
    private: 
    int mileage; 
    public: 
    car(int); // Constructor 
    void odometer(); 
}; 

car::car(int m) { 
    mileage = m; 
} 

void car::odometer() { 
    return mileage; 
} 

int main(void) { 
    car ford(10000), honda(20000); 

    cout<<ford.odometer(); //Returns 20000, since honda constructor overwrites private variable 'mileage' 
} 

有沒有什麼辦法讓里程錶()方法返回無論是福特或本田的里程,這取決於我想要什麼?

+1

第一個問題是什麼?你爲什麼要保護實例不會訪問彼此的成員變量? – 2013-03-07 17:16:00

+0

'//返回20000,因爲honda構造函數會覆蓋私有變量'mileage''這是完全錯誤的。你確認了嗎?它肯定覆蓋了它自己的*成員,但爲什麼它會碰到其他東西? – GManNickG 2013-03-08 21:18:17

回答