C++类/结构成员的默认可见性

76
在C++中,为什么类的成员默认情况下是私有(private)可见性,而结构体的成员默认情况下是公共(public)可见性?
4个回答

104

C++作为C的超集被引入。结构体从C中继承而来,其成员的语义是公共的。许多C代码存在,包括那些希望与C++一起使用的库,使用结构体。在C++中引入了类,为了符合面向对象封装的理念,它们的成员默认情况下是私有的。


1
说实话,封装并不一定要求所有成员都是私有的。在C++中,使用内联函数可以很便宜地实现访问器方法,但在许多面向对象编程语言中,由于函数调用的开销,人们倾向于使用公共访问方式,因为这样更便宜。为了更好地控制,如果编程语言支持,可以使用属性声明。然而,在本机代码中,跟踪变量更改比托管语言更困难,因此通过代码中的单个点设置属性是有意义的。 - progician

10
由于类是面向对象编程的常用方式,这意味着成员变量应该是私有的并具有公共访问器 - 这对于创建低耦合性非常有用。另一方面,结构体必须与C结构体兼容,后者始终是公共的(在C中没有公共和私有的概念),并且不使用访问器/修改器。

2

可能是为了与C结构体保持向后兼容性。这样,在C++代码中使用声明在C代码中的结构体时,它们仍然可以像以前一样工作。


-1

直接回答:C++中结构体的默认可见性为public,而类的默认可见性为private。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接