当我在一个类中定义一个变量时,每当我声明这个类的一个实例时,它就会在内存中为特定实例创建该变量的新副本。我理解这一点,但是当所有成员变量都是私有的时候,这是否适用?例如:是否为每个类的实例实例化私有类变量?
class A {
int a, b, c;
};
A a;
当我创建一个新的实例,还是分配给a
这些私有变量,即使他们不能在类的外部使用?
当我在一个类中定义一个变量时,每当我声明这个类的一个实例时,它就会在内存中为特定实例创建该变量的新副本。我理解这一点,但是当所有成员变量都是私有的时候,这是否适用?例如:是否为每个类的实例实例化私有类变量?
class A {
int a, b, c;
};
A a;
当我创建一个新的实例,还是分配给a
这些私有变量,即使他们不能在类的外部使用?
编号内存分配是一个实现细节。考虑代码:
class A {
int a, b, c;
};
int main()
{
A a;
}
有可能是不存在存储器分配任何,因为C++在AS-如果模型运行。意思是,如果输出与预期的相同,编译器可以自由地执行任何操作。包括优化出死代码。
尽管如此,您可以假定空间已分配给对象的所有成员。
给提问者一个警告:你可能要先阅读最后一句。然后在晚些时候阅读其余的内容! –
@sftrabbit别担心,我明白他在说什么。只是好奇,从来不知道这一点。 –
你认为私人变量“不能从班级以外使用”是不正确的。声明一个成员private
只是意味着它不能被直接从课堂外名称引用(当然除了班级朋友)。 “不能使用”是一个更强的断言,这恰好是不真实的。
如果“外部世界”以某种方式获得访问该私有成员的替代方式,则可以不受任何限制地执行该操作。例如,您的类可能实现一个公共访问成员函数,该函数返回绑定到私有成员的引用(或指针)。这将使该特定成员从外部间接访问。
实际上,除了在成员名称的级别上工作的纯概念性编译时访问限制之外,该类的公共和私人成员之间绝对没有区别。它是编译器级别实现的一个非常薄的保护层。没有任何物理背后的东西,即不管他们的保护水平如何,班级的数据成员之间没有物理差异。
没有downvote,但这并没有回答这个问题。 – 0x499602D2
@大卫:是的,它的确如此。 “公共和私人成员绝对没有区别......”是对这个问题的直接和直接的回答。 – AnT
*这些私有变量仍然分配给'a',即使它们不能在课堂外使用吗?*是问题。他可能有一个误解,你可以为他清楚,但这仍然没有回答主要问题。 – 0x499602D2
是的它是正确的 – triclosan
这可以在任何关于C++基础知识的书籍或网页中找到。 –
@MarekR我的书对它的工作原理的解释非常混乱。你可以请拿走downvote? –