Доступ к спецификатору и классам и объектам? - PullRequest
1 голос
/ 09 июня 2010

Хорошо, я пытаюсь это понять,

, поэтому класс просто создает шаблон для объекта.

class Bow
{

int arrows;

};

, а объект просто создает конкретный элемент, используя классtemplate.

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

еще один вопрос: публичные спецификаторы используются для того, чтобы сделать элементы данных доступными в объектах, а закрытые спецификаторы используются для того, чтобы члены данных были доступны только внутри класса?

Ответы [ 5 ]

3 голосов
/ 09 июня 2010

Описание, которое вы дали, в основном верно, но ваши примеры не показывают того, что вы описываете.

Класс описывает набор элементов данных и функций-членов, которые могут вызываться для этих элементов данных:

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
2 голосов
/ 09 июня 2010

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;
}
1 голос
/ 09 июня 2010

Что касается вашего первого пункта, Bow :: Bow (стрелки) - это конструктор, который является методом для класса Bow, ответственным за инициализацию экземпляра этого класса.Ваше понимание модификаторов доступа верно.Публичные участники видны вне класса, а частные - нет.Защищенные члены видны для классов, производных от этого класса.

1 голос
/ 09 июня 2010

Используя общедоступный спецификатор, вы разрешаете любому, кто использует ваш класс, прямой доступ к этому члену класса. Частным образом вы запрещаете это, и у пользователя нет возможности получить к нему прямой доступ. Существует также защищенный спецификатор, который позволяет производным классам манипулировать этим членом класса.

Вы правы, что класс - это что-то вроде шаблона для объекта. Когда вы создаете экземпляр класса, вы получаете «реальную» вещь, реализацию шаблона.

0 голосов
/ 09 июня 2010

объект просто создает определенный элемент, используя шаблон класса.

Замените слово «объект» на «конструктор», а «элемент» на «объект».И отбросьте слово «шаблон», так как это имеет другое значение в C ++.

публичные спецификаторы используются, чтобы сделать элементы данных доступными в объектах

Не совсемpublic делает члены доступными для клиентов объекта (или класса, если это статический член).

и частные спецификаторы используются для того, чтобы сделать члены данных доступными только внутри класса

Это в основном правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...