C++ C++;私人建筑

C++ C++;私人建筑,c++,struct,structure,private-members,C++,Struct,Structure,Private Members,我已经读到类和结构(函数除外)之间的主要区别是类成员默认为private,而结构成员默认为public 这意味着结构成员可以是私有的。我的问题是:你能拥有私有结构成员吗?如果可以,使用私人会员的目的是什么?您甚至可以如何访问它们?是的,结构可以有私有成员,您只需使用访问说明符即可 struct Mystruct { private: m_data; }; 结构和类别之间的唯一区别是: 类的访问说明符默认为private,结构的访问说明符默认为public 类的继承默认

我已经读到类和结构(函数除外)之间的主要区别是类成员默认为private,而结构成员默认为public


这意味着结构成员可以是私有的。我的问题是:你能拥有私有结构成员吗?如果可以,使用私人会员的目的是什么?您甚至可以如何访问它们?

是的,结构可以有私有成员,您只需使用访问说明符即可

struct Mystruct
{
    private:
       m_data;

};
结构和类别之间的唯一区别是:

  • 类的访问说明符默认为private,结构的访问说明符默认为public
  • 类的继承默认为private,结构的继承默认为public
您如何访问它们?
就像访问类的私有成员一样。i、 e:它们只能在结构成员函数中访问,不能在派生结构等中访问。

结构和类之间的唯一区别是默认访问(除了一些奇怪的模板情况,请参见下面的Alf注释)。这意味着您可以使用与类中相同的方式访问私有成员:

struct foo {
  int get_X() { return x; }
  void set_X(int x_) { x = x_; }
private:
  int x;
};

无论您使用的是
struct
还是
class
,这纯粹是风格问题。当所有成员都是公共成员时,我倾向于使用
struct
(例如,如果它是一个没有成员变量且只有公共函数的函子类)。

一件有用的事情是,你也可以在structs中使用friend关键字,因此,私有成员只能由那些特定的函数或类或您不想修改的东西使用和修改。这样,用户就不能自己修改这些部分。它们甚至不会出现在自动填充功能中,至少在VisualStudio中是这样

嗯,关于关键字,模板参数列表中也存在差异,例如
templateclass Bar>
。你不能用
struct
:-)来写您不能为此使用
typename
(这将是语法错误)。干杯,@AlfP.Steinbach我想我说得对,不能在任何类型的模板中使用关键字
struct
,因为必须使用
class
typename
。您使用模板参数制作示例的事实实际上有点令人困惑。@Nexus:我认为您所说的是模板参数列表,在这种情况下,我认为您是对的。我使用模板参数只是因为在这种情况下必须使用
class
关键字。@AlfP.Steinbach Ok,但您的示例中让人困惑的是
模板类MyClass是完全合法的。我只想指出一点,你访问私有结构成员的方式与访问私有类成员的方式相同。只有当你认为结构和类不同时,这个问题才有意义。试着把它们想象成几乎一样。