【发布时间】:2013-03-07 17:11:45
【问题描述】:
我有一个两部分的问题。首先,我了解 C++ 仅提供类级别的数据封装,这意味着同一类的所有对象都可以访问彼此的私有成员。我理解其中的原因,但发现了一些似乎与这一点相矛盾的链接(即http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/),这表明我可以执行以下操作:
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;
}
我想做的实际上是完成这项工作,即我想在一个类中定义一个变量,该变量在每个实例化中都是私有的(这是我的第二个问题)。由于上面的代码 sn-p 似乎无法实现这一点,是否有一种解决方法可以用来创建单个对象私有的数据?谢谢!
编辑:
确实,我还在学习 OO 基础知识。我将使用无处不在的汽车示例来展示我正在尝试做的事情,我确信这一定是一个常见的尝试。我欢迎任何关于如何重新思考它的建议:
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'
}
有什么方法可以让 odometer() 方法返回福特或本田的里程数,这取决于我想要什么?
【问题讨论】:
-
第一个问题是什么?为什么要保护实例不访问彼此的成员变量?
-
//Returns 20000, since honda constructor overwrites private variable 'mileage'这是完全错误的。你验证了吗?当然,它会覆盖它的自己的成员,但是为什么它会触及其他任何东西呢?
标签: c++ encapsulation