2015-05-04 2 views
0

Я изучаю C++, потому что в моей школе я воспринимаю это как предмет, мой профессор сделал этот кусок кода, и у меня есть вопрос.В чем смысл :: в C++?

class binario{ 

public: 
    int n; 

    binario(); // constructor sin parametros 
    binario(int); //Constructor con parametro 

    void estado(); //funcion 
    long int convierte(); //funcion 
    long int complementouno(); //funcion 
}; 
binario::binario(){ //binario clase :: binario constructor sin parametro 
    n=0; //inicialia n = 0 
}; 

binario::binario(int n){ //binario clase :: binario (int n) constructor con parametro 
    **binario::n=n;** 
}; 

Что Binario :: п = п означает ?? Спасибо, я надеюсь, что смогу помочь, мой профессор недостаточно хорош.

+0

Это означает, что вы устанавливаете член класса 'n' со значением из параметра' n', который скрывает член класса 'n'. Я всегда избегаю ситуации, назвав параметр иначе, чем член класса. – drescherjm

+3

Просто примечание: ';' после закрытия скобки функций не нужно. (clang дает предупреждение для этого) – Borgleader

+1

related: http://stackoverflow.com/questions/9338217/why-does-c-need-the-scope-resolution-operator – NathanOliver

ответ

2

:: предназначен для доступа к статическим переменным и методам класса/структуры или пространства имен. Он также может быть использован для доступа к переменным и функциям из другой области (фактически, класс, структура, пространство имен являются областями в этом случае)

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

+0

поэтому binario :: работает, поэтому я могу использовать n переменную, которая выше? –

+0

То, что кажется.В основном вы делаете что-то вроде 'binario :: n' для доступа к переменной' n' как статический – ryekayo

1

Он устанавливает значение n внутри класса в значение n, указанное в качестве параметра при строительстве. Поскольку оба имеют одно и то же имя, требуется некоторое различие.

Предпочтительно, чтобы написать:

binario::binario(int n) { 
    this->n = n; 
} 

или используют разные названия:

binario::binario(int a_number) { 
    n = a_number; 
} 

Примечание: this является указателем на объект и может использоваться для доступа ко всем членам внутри , вы можете использовать this внутри любой функции класса.

Edit: (Добавлено от комментариев.) Вы бы использовать binario::n или this->n недвусмысленный относятся к int n внутри класса. Это необходимо, поскольку имя параметра и элемент данных имеют одинаковое имя: n. Во втором примере параметр имеет другое имя, a_number, и ясно, что n относится к элементу данных, а не к параметру.

+0

binario :: binario (int nn) { n = nn; } Не должно быть бинарио :: n = nn? Или почему у этого нет бинарио :: –

+0

Вы бы использовали 'binario :: n' или' this-> n', чтобы явно ссылаться на 'int n' внутри класса. Это необходимо, поскольку имя параметра и элемент данных имеют одно и то же имя: 'n'. Во втором примере параметр имеет другое имя, 'nn', и ясно, что' n' относится к элементу данных, а не к параметру. –

1

Этот код не является хорошим примером. Это может быть лучше:

class binario{ 

    public: 
    // If you are are using C++11 (or higher): 
    // int n = 0; 
    int n; 

    binario(); 
    binario(int); 

    void estado(); 
    long int convierte(); 
    long int complementouno(); 
}; 

binario::binario() 
// If you are are not using C++11 (or higher). Otherwise omit this and use 
// above initialization. 
: n(0) 
{}; 

binario::binario(int n) 
// Prefer class member initializer lists. Here the first 'n' is the member 
// and the second 'n' the argument. Although, you might consider different 
// names, to avoid confusion. 
: n(n) 
{}; 

Как уже отмечалось другими, вы можете использовать this->n или binario::n (пожалуйста, предпочитают this->n) в функции (конструктор) тел, чтобы отличить «Binario :: п» из вне «п» ;

Обратите внимание: я раздели все бесполезные комментарии и добавил некоторые другие (комментирование только для комментариев - это плохая привычка).

+0

Теперь я понял, что мой учитель сделал этот код, и он делает некоторые странные вещи, но, несмотря на все хорошие объяснения, которые я получил от всех вас, я мог бы это понять, большое спасибо: D –

Смежные вопросы