2013-03-07 57 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

回答