C++11 标准 11/3 说:
private
默认情况下,使用关键字 class 定义的类的成员。
在 11.2/2
在没有基类的访问说明符的情况下,private
当使用类键类定义类时,假定[...]。
在 11.2/1:
private
如果使用访问说明符将一个类声明为另一个类的基类,则基类的public
和protected
成员可以作为private
派生类的成员访问。
那是什么意思?首先:
class A {};
class B : A {};
在这里A
,凭借 11.2/2 是私有继承的。如果您想继承变量并且只想在派生类中为变量实现 getter/setter,这可能没问题,但这通常被认为是不好的风格。
但是,在您的情况下,如 11/3 所述,您的成员根本不会被继承,因为它们是私有成员:
class A
{
public:
int a; // inherited
protected:
int b; // inherited
private:
int c; // NOT inherited
};
尤其是
class A { int a; };
相当于
class A { private: int a; };
因此,您可以通过使它们或(参见 11.2/1)使您的成员可从派生类中访问:public
protected
class A { public: int a; };
class B : A {}; // privately inherits a
如果你想让它可以从你的派生类之外访问,你也必须继承public
:
class A { public: int a; };
class B : public A {}; // publicly inherits a
但这不是你通常会做的。将变量设为私有并仅公开这些变量的 getter 和 setter 被认为是更好的风格:
class A
{
public:
int get_a() const { return a_; }
void set_a(int val) { a_ = val; }
private:
int a_;
};
class B : public A {}; // now publicly inherits the getters and setters
// but not a_ itself