Ofe*_*Ron 1 c++ privileges class
我是C++的新手,我熟悉Java.我想知道,当我开始寻找在C++代码的第一件事是,类本身(而不是成员)不具有访问说明这样的private,protected和public.这里和这里都有例子.
public class A { // This line.
private class B { } // Not this line.
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
jua*_*nza 10
在类级别没有访问修饰符,因为该语言没有包的概念.但是在数据成员,成员函数和继承的层面上:
class Foo {};
class Bar : public Foo {
public:
void bar() const {}
private:
int bar_(float) {}
int a, b, c;
};
Run Code Online (Sandbox Code Playgroud)
最接近的是在类中声明嵌套类:
class Foo {
struct Bar0 {
void bar0() const {}
};
struct Bar1 {
Bar0 b0;
Bar1() { b0.bar0();}
};
};
Run Code Online (Sandbox Code Playgroud)
不需要类级访问说明符.如果您想要一个private类,可以在实现文件或匿名中定义它namespace.这种限制是在C++的文件级别完成的(即如何组织标头,预处理器指令).
编辑前:
他们这样做,但他们不是按方法.此外,类具有默认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
};
Run Code Online (Sandbox Code Playgroud)
注1 C++也有struct,class除了默认访问级别外,它与a 相同public.
注2: C++中没有包范围.在Java中,protected允许访问整个包,在C++中它只提供对派生类的访问.
注3:friend关键字可用于绕过限制,查找.