我是C ++的新手,我熟悉Java。我开始关注C ++代码的第一件事就是类本身(而不是成员)没有访问说明符private
,protected
和public
。例如here和here。
public class A { // This line.
private class B { } // Not this line.
}
为什么会这样?
答案 0 :(得分:10)
在课程级别没有访问修饰符,因为该语言没有包的概念。但是在数据成员,成员函数和继承的层面上:
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();}
};
};
答案 1 :(得分:5)
不需要类级访问说明符。如果您需要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
,与class
相同,但默认访问级别为public
。
注意2 C ++中没有包范围。在Java中,protected
提供对整个包的访问,在C ++中它只提供对派生类的访问。
注3 friend
关键字可用于绕过限制,查找。
答案 2 :(得分:0)
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
可以在任何地方使用。
答案 3 :(得分:-1)
来自您的来源:http://www.cplusplus.com/doc/tutorial/classes
类的私有成员只能从其他成员访问 同一个班级的成员或他们的朋友。受保护的成员是 可以从同一个班级的成员和他们的朋友那里获得, 但也来自派生类的成员。最后,公开 可以从对象可见的任何地方访问成员。