【问题标题】:C++ Private StructuresC++ 私有结构
【发布时间】:2011-12-10 05:23:29
【问题描述】:

我读过,类和结构(除了函数)之间的主要区别是类成员默认为私有,而结构成员默认为公共。

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

【问题讨论】:

  • 您可以像访问私有类成员一样访问私有结构成员。仅当您认为结构和类不同时,这个问题才有意义。试着把它们想象成几乎相同。

标签: c++ struct structure private-members


【解决方案1】:

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

struct Mystruct
{
    private:
       m_data;

};

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

  • 访问说明符默认为类的私有和结构的公共
  • 类的继承默认为私有,结构的默认为公有

如何访问它们?
就像您访问班级的私人成员一样。即:它们只能在结构成员函数中访问,而不能在派生结构等中访问。

【讨论】:

    【解决方案2】:

    structclass 之间的唯一区别是默认访问(除了一些奇怪的模板情况,请参阅下面的 Alf 的 cmets)。这意味着您可以像在类中一样访问私有成员:

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

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

    【讨论】:

    • 好吧,关于关键字,模板参数列表也有所不同,例如template< template< class Foo > class Bar >。你不能用struct 来写。 :-)
    • 您不能为此使用typename(这将是语法错误)。干杯,
    • @AlfP.Steinbach 我相信我的说法是正确的,不能在任何类型的模板中使用关键字struct,因为必须使用classtypename。您使用模板模板参数创建示例的事实实际上有点令人困惑。
    • @Nexus:我认为您在谈论模板参数列表,在这种情况下,我认为您是对的。我使用模板模板参数只是因为这是必须使用class 关键字的情况。
    • @AlfP.Steinbach 好的,但是您的示例令人困惑的是template<template <typename Foo> class Bar> class MyClass; 是完全合法的。只是想指出来。
    【解决方案3】:

    使这个有用的一点是您还可以在结构中使用friend关键字,因此私有成员只能由那些特定的函数或类使用和修改,或者您不希望能够修改它。这样用户就不能自己修改这些部分。它们甚至不会出现在自动填充功能中,至少在视觉工作室中是这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 2014-06-14
      • 2019-02-13
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 2021-01-13
      相关资源
      最近更新 更多