Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

Colon syntex - C++

03.06.2012, 13:47. Просмотров 275. Ответов 7
Метки нет (Все метки)

Я правильно понимаю, что колон синтекс может применяться только при создании коструктора класса?
Для имплементации членов функций он не используется.
Например:

Point::Point (double xNew, double yNew)
C++
1
2
3
4
5
6
{
    i_pc+=1;
    cout << "Point  const. was called: "<<i_pc<< " times"  << endl; 
    Xcoord = xNew; 
    Ycoord = yNew;
}
Равняется :

C++
1
2
3
4
5
6
 Point::Point (double xNew, double yNew)
     : Xcoord(xNew), Ycoord(yNew)
 {  
                i_pc+=1;
        cout << "Point  const. was called: "<<i_pc<< " times"  << endl;                 
 }
Но нельзя :
C++
1
2
3
4
5
void Point::SetYCoordinate(const double Value) 
 
{
    Ycoord = Value;
}
переписать в колон синтекс ???
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 13:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Colon syntex (C++):

Error: comma, colon or end of line expected - Assembler
Здравствуйте! Помогите, пожалуйста, разобраться с ошибкой. На 13 и 15 строке ошибка &quot;error: comma, colon or end of line expected&quot;....


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

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 16:18 #2
А можно как-то на русском объяснить чего вы хотите? Вот эти слова переведите:
Цитата Сообщение от Leeto Посмотреть сообщение
колон синтекс
Цитата Сообщение от Leeto Посмотреть сообщение
имплементации
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
03.06.2012, 18:37  [ТС] #3
Цитата Сообщение от Gepar Посмотреть сообщение
А можно как-то на русском объяснить чего вы хотите? Вот эти слова переведите:
я извиняюсь...

ну типа я знаю что конструктор можно реализовать 2мя вариантами которые я выше указал, а вот можно же так же члены функции классов реализовать двумя способами. Заранее спасибо
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
03.06.2012, 19:50 #4
Цитата Сообщение от Leeto Посмотреть сообщение
а вот можно же так же члены функции классов реализовать двумя способами
Нет. Всё, что находится после двоеточия, это список инициализации. В вашем примере, в первом случае переменным присваиваются значения, а во втором перменные инициализируются значением. Т.е., для первого случая выполняется следующее(присваивание)
C++
1
2
3
4
double Xcoord;
double Ycoord;
Xcoord = xNew;
Ycoord = yNew;
для второго(инициализация)
C++
1
2
double Xcoord = xNew;
double Ycoord = yNew;
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 19:51 #5
Ну вроде понял чего ты спросить хотел.
Инициализация x(2) от x=2. Отличается. В конструкторе можно использовать первую форму (а иногда и нужно так как иначе не получится в случае с наследованием) так как объект ещё не создан вот тебе с++ и даёт свободу чтобы ты при создании объекта его инициализировал. При вызове функции же объект уже существует и нельзя его инициализировать задействовав конструктор копирования через ().
Так понятно?
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
03.06.2012, 22:05  [ТС] #6
Цитата Сообщение от Gepar Посмотреть сообщение
Ну вроде понял чего ты спросить хотел.
Инициализация x(2) от x=2. Отличается. В конструкторе можно использовать первую форму (а иногда и нужно так как иначе не получится в случае с наследованием) так как объект ещё не создан вот тебе с++ и даёт свободу чтобы ты при создании объекта его инициализировал. При вызове функции же объект уже существует и нельзя его инициализировать задействовав конструктор копирования через ().
Так понятно?
Не вопрос не в том чем отличается хотя тоже спасибо ) я хотел узнать можно ли так же передавать значение в переменную если речь идет не о конструкторе а о членах функциях. Я так понимаю что x(2) более быстрый вариант по сравнению с x=2... и если бы можно было бы срезать углы на этой беговой дорожке таким образом то было бы здорово...
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
03.06.2012, 22:20 #7
Цитата Сообщение от Leeto Посмотреть сообщение
Я так понимаю что x(2) более быстрый вариант по сравнению с x=2... и если бы можно было бы срезать углы на этой беговой дорожке таким образом то было бы здорово...
Не быстрый. Не совсем я бы сказал:
x(2) - вызов конструктора копирования при создании объекта и всё. Итого 1 операция
x=2 - вызов конструктора по умолчанию при создании объекта и тут же вызов оператора присваивания. Итого 2 операции
Тоесть "срезать углы" получиться лишь при создании объекта же. Дальше при работе он уже создан, нечего срезать.
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
04.06.2012, 12:58  [ТС] #8
Цитата Сообщение от Gepar Посмотреть сообщение
Не быстрый. Не совсем я бы сказал:
x(2) - вызов конструктора копирования при создании объекта и всё. Итого 1 операция
x=2 - вызов конструктора по умолчанию при создании объекта и тут же вызов оператора присваивания. Итого 2 операции
Тоесть "срезать углы" получиться лишь при создании объекта же. Дальше при работе он уже создан, нечего срезать.
ну так это то и интересно ) две операции меньше больше чем одна в 2 раза ) (спасибо Кэп) если, а если 35 классов так вообще здорово. Так можно таким же макаром синтаксис менять для членнов класса ? и если да то насколько это устойчиво получиться ?
Yandex
Объявления
04.06.2012, 12:58
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru