2 / 2 / 1
Регистрация: 06.09.2015
Сообщений: 81
1

Назначение оператора ::

17.11.2015, 12:45. Показов 801. Ответов 8
Метки нет (Все метки)

Добрый день!

Сейчас изучаю классы и в примерах часто сталкиваюсь с конструкциями типа
C++
1
2
3
4
void StringsWork::getStr()
{
    cout << str << endl << endl;//вывод символьного массива класса на экран
}
Понятно, что объявляется метод. Непонятно назначение вот этого оператора ::

Плиз хелп!
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2015, 12:45
Ответы с готовыми решениями:

Назначение оператора return
Клянусь вам что прочёс огромное кол-во статей, форумов и т.д. про функцию return, но так и не понял...

Назначение оператора delete[]
Для освобождения динамической памяти от массива предлагают оператор delete #include &lt;iostream&gt;...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В...

Придумайте простую программу с использованием условного оператора IF и оператора switch
Пожалуйста, придумайте простую программу с использованием: условного оператора IF и оператора...

8
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
17.11.2015, 12:49 2
Это scope resolution operator.
В данном случае он обозначает, что getStr находится в классе StringsWork.
2
2 / 2 / 1
Регистрация: 06.09.2015
Сообщений: 81
17.11.2015, 12:59  [ТС] 3
Это понятно, что он находится в классе StringsWork.
Непонятно зачем это используется, так как метод getStr и так описан внутри класса?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
17.11.2015, 13:04 4
Цитата Сообщение от degvelo Посмотреть сообщение
Непонятно зачем это используется, так как метод getStr и так описан внутри класса?
Как он описан? Можешь показать?
0
2 / 2 / 1
Регистрация: 06.09.2015
Сообщений: 81
17.11.2015, 13:07  [ТС] 5
Вот код. Непонятно зачем при описании метода getStr используется оператор ::

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string.h>
 
using namespace std;
 
class StringsWork
{
private:
    char str[256];//строка, которая доступна классу
public:
    StringsWork()//конструктор в котором очистим строку класса от мусора
    {
        for(int i = 0; i < 256; i++)  str[i] = '\0';
    }
 
    void operator +(char*);//прототип метода класса в котором мы перегрузим оператор +
    void getStr();//метод вывода данных на экран
};
 
void StringsWork::operator +(char *s) //что должен выполнить оператор +
{
    strcat(str, s); //сложение строк
}
 
void StringsWork::getStr()
{
    cout << str << endl << endl;//вывод символьного массива класса на экран
}
0
В астрале
Эксперт С++
8042 / 4799 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2015, 13:09 6
degvelo, Потому что определение находится в глобальной видимости, а не области класса, поэтому нужно явно указать что метод getStr относится к классу StringsWork.
1
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
17.11.2015, 13:11 7
Цитата Сообщение от degvelo Посмотреть сообщение
Вот код. Непонятно зачем при описании метода getStr используется оператор ::
В классе нет тела функции.

Ты можешь написать тело в классе, тогда код из первого поста можно будет удалить.

Не по теме:

Видишь кнопку "C++" при редактировании сообщения? Отгадай, зачем она нужна...

0
2 / 2 / 1
Регистрация: 06.09.2015
Сообщений: 81
17.11.2015, 13:13  [ТС] 8
А в чем разница если писать тело метода в классе или за пределами класса?
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
17.11.2015, 13:17 9
Цитата Сообщение от degvelo Посмотреть сообщение
А зачем объявлять метод в области глобальной видимости, а не в области класса.
Класс может быть описан в заголовочном файле. Мотод может быть реализован в отдельном cpp-файле.
Процесс компиляции в таком случае будет происходить быстрее. Особенно, если классов сотни или тысячи.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2015, 13:17
Помогаю со студенческими работами здесь

Неправильная работа оператора присваивания после работы оператора суммирования
Доброго времени суток. У меня есть класс вектор class TVector {//ewde public: TVector();...

Вызов прегруженного оператора вывода в поток из аналогичного оператора
Программирую в c9.io с g++ получается тоже самое. Элементами стека(pointList) являются стеки(list)...

Сравнить два целых числа, не используя условного оператора, оператора выбора и так же символов сравнения
Добрый день уважаемые программисты, хотелось, чтобы вы помогли мне в решении одной задачи, а именно...

сочетания оператора цикла и условного оператора
Известна оценка каждого ученика по физике, посчитать сколько пятерок, количество человек в классе,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru