我是 C++ 新手,我熟悉 Java。当我开始查看 C++ 代码时,我首先想知道的是类本身(不是成员)没有访问说明符,例如private
,protected
和public
. 这里和这里的例子。
public class A { // This line.
private class B { } // Not this line.
}
为什么呢?
在类级别没有访问修饰符,因为该语言没有包的概念。但是在数据成员,成员函数和继承级别上有:
class Foo {};
class Bar : public Foo {
public:
void bar() const {}
private:
int bar_(float) {}
int a, b, c;
};
最接近的方法是在类中声明嵌套类:
class Foo {
struct Bar0 {
void bar0() const {}
};
struct Bar1 {
Bar0 b0;
Bar1() { b0.bar0();}
};
};
不需要类级别的访问说明符。如果你想要一个private
类,你可以在实现文件或匿名中定义它namespace
。这种限制是在 C++ 的文件级别完成的(即你如何组织你的头文件,预处理器指令)。
编辑前:
他们这样做,但他们不是per-method。此外,类具有默认private
说明符,因此,除非另有说明,否则它们是private
.
class A
{
void foo(); //private
};
class B
{
void foo(); //private
public:
void foo1(); //public
void foo2(); //public
protected:
void foo3(); //protected
private:
void foo4(); //private
};
注意 1 C++ 也有struct
,它与 a 相同,class
但默认访问级别是public
.
注 2 C++中没有包范围。在 Java 中,protected
提供对整个包的访问权限,在 C++ 中,它只提供对派生类的访问权限。
注3关键字friend
可以用来绕过限制,查一下。
C++ 使用稍微不同的语法,其中访问修饰符是为声明组而不是单独指定的:
class Test {
class MyPrivateClass {
// ...
};
void privateByDefault();
public:
void myPublicFunction();
void anotherPublicFunction();
private:
void myPrivateFunction();
public:
class MyPublicClass {
// ...
};
void morePublicFunctions();
protected:
// ...
};
Test::MyPrivateClass
在 之外无法访问Test
,而Test::MyPublicClass
可以在任何地方使用。
从您的来源:http ://www.cplusplus.com/doc/tutorial/classes
类的私有成员只能从同一类的其他成员或他们的朋友访问。受保护的成员可以从它们的同一个类的成员和它们的朋友访问,也可以从它们的派生类的成员访问。最后,公共成员可以从对象可见的任何地方访问。