【问题标题】:Access specifier's and classes and objects?访问说明符以及类和对象?
【发布时间】:2010-06-09 16:54:07
【问题描述】:

好吧,我正在努力理解这一点,

所以一个类只是为一个对象创建一个模板。

class Bow
{

int arrows;

};

一个对象只是使用类模板创建一个特定的项目。

Bow::Bow(arrows)
{
arrows = 20;
}

还有一个问题,公共说明符用于使数据成员在对象中可用,而私有说明符用于使数据成员仅在类中可用?

【问题讨论】:

  • ctor 应该如下所示:Bow::Bow() : arrows(20) {}

标签: c++ class object


【解决方案1】:

您提供的描述大部分是正确的,但您的示例并未显示您所描述的内容。

一个类描述了一组数据成员和可以在这些数据成员上调用的成员函数:

class Bow
{
public:
   //Constructor
   Bow::Bow()
   {
     arrows = 20;
   }

   Bow::Bow(int a)
   {
     arrows = a;
   }


   //member functions (in this case also called accessors/modifiers)
   void getArrows(int a) const
   {
     return arrows;
   }

   void setArrows(int a)
   {
     arrows = a;
   }

protected:
  int arrows;
  };

类的对象只是该类的一个实例。

//b and d are objects of the class Bow.
Bow b(3);//The constructor is automatically called here passing in 3
Bow d(4);//The constructor is automatically called here passing in 4
Bow e;//The constructor with no parameters is called and hence arrows = 20

注意:我故意避免使用您使用的模板一词,因为它在 C++ 中用于与您的意思完全不同的东西。


要了解公共/私有/受保护的说明符:

public:表示类的对象可以直接使用成员。

protected: 表示类的对象不能直接使用成员。基于该类的派生类可以使用成员。

private: 表示类的对象不能直接使用成员。基于该类的派生类也不能使用成员。

所以在上面的例子中:

Bow b(3);
b.arrows = 10;//Compiling error arrows is not public so can't be accessed from an object

【讨论】:

  • 真的吗?因为该类只是创建成员数据,我没有看到制作方法的意义。所以我没有初始化这个类吗?
  • @TimothyTech:它是一组数据成员和一组成员函数,这两组可以是空的,也可以不是空的。
  • 我喜欢你的例子。那么您是否将箭头变量设置为 const,然后在您的第二种方法中为 const 赋予值?
  • @TimothyTech:第二种方法末尾的 const 只是意味着后面的函数不会改变任何成员变量。
【解决方案2】:

Public 表示该成员对类外的代码可见。 私有意味着该成员仅对类内的代码可见(或类指定的任何内容都是它的朋友)。

例如:

class X { 
    int priv;
public:
    int pub;

    do_something() { 
        // since do_something() is part of X, it can change both pub and priv:
        priv = -1;
        pub = -2;
    }
};

int main() { 
    X x;

    x.pub = 2;    // allowed
    x.priv = 1;   // won't compile; x.priv isn't accessible.

    x.do_something();    // This is no problem though.
    return 0;
}

【讨论】:

  • 等一下,我可以像普通变量一样初始化类中的变量吗?
  • 初始化它们,你必须使用构造函数,但你可以像普通变量一样赋值给它们。
【解决方案3】:

通过使用 public 说明符,您允许使用您的类的任何人直接访问该类成员。通过私人您禁止这样做,并且用户无法直接访问它。还有受保护的说明符,它允许派生类操作该类成员。

你是正确的,一个类就像一个对象的模板。当你创建一个类的实例时,你就得到了“真正的”东西,模板的实现。

【讨论】:

    【解决方案4】:

    关于您的第一点,“Bow::Bow(arrows)”是一个构造函数,它是 Bow 类的一个方法,负责初始化该类的实例。您对访问修饰符的理解是正确的。公共成员在类外可见,而私有成员不可见。受保护的成员对派生自该类的类可见。

    【讨论】:

      【解决方案5】:

      一个对象只是使用类模板创建一个特定的项目。

      将单词“object”替换为“constructor”,将“item”替换为“object”。并去掉“模板”这个词,因为这在 C++ 中有不同的含义。

      公共说明符用于使数据成员在对象中可用

      不完全是。 public 使对象(或类,如果它是静态成员)的客户端可用。

      私有说明符用于使数据成员仅在类内可用

      基本正确。

      【讨论】:

        猜你喜欢
        • 2013-11-14
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 2014-01-11
        • 2016-06-16
        • 2011-01-15
        相关资源
        最近更新 更多