powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Некоторые вопросы о программировании на C++
142 сообщений из 142, показаны все 6 страниц
Некоторые вопросы о программировании на C++
    #39041988
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
BS говорит, важно понять концепцию, детали не должны быть на первом месте. Думаю что он прав. Не уверен что полностью понял концепцию, для того чтобы её понять мне потребуется поучаствовать в каком-нибудь серьёзном проекте, нужен опыт, нужен не один год, и я это прекрасно понимаю. Но что-то мне стало понятно. Потому я стал тщательнее разбираться в деталях. Использую книги BS, немного Лафоре, и конечно стандарт С++. Я пробовал читать книгу Павловской, которую мне советовали, но BS мне нравится больше. Возникли некоторые вопросы, подскажите пожалуйста

1. Согласно стандарту классом в С++ будут являться объекты объявленные с ключевыми словами class, struct, union. При этом, согласно стандарту члены классы объявленные в классе с характеристикой типа class по умолчанию имеют access contol типа private, в случае иной характеристики(struct или union) объекты класса объявленные по умолчанию имеют access contol типа public.
1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.
1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?
1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ?
1.4 Часто ли вы определяете объекты union в своих программах?
2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?
3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ?
4. Существует ли стандарт в котором дано определение того, что такое ООП ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39041995
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryBS говорит, важно понять концепцию, детали не должны быть на первом месте. Думаю что он прав. Не уверен что полностью понял концепцию, для того чтобы её понять мне потребуется поучаствовать в каком-нибудь серьёзном проекте, нужен опыт, нужен не один год,И нужно много языков.

SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.Для упрощения реализации.

SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?По нужде и желанию.

SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ? Из Си в С++? Нет перенос структур вполне прозрачен.
Но вообще-то, программы из Си в С++ никто не переносит. Не, бывают конечно идиоты которым делать нечего, и студенты которые сдают лабы лишь бы тройку получить - те да, те переносят. Вернее пытаются...

SashaMercury1.4 Часто ли вы определяете объекты union в своих программах?При нужде бывает. Но нужда возникает очень редко. Но бывает.

SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет.
В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.

SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ? Как надо, так и говорим. Определение и представление это не синонимы, это две разные вещи.
SashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ?Нет. Но существуют учебники. Читай про Simula & SmallTalk. Первая реализация ООП в Simula, но SmallTalk вывел ООП в люди.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042012
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет.
В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.

Но как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход.


White Owl По нужде и желанию.


Т.е. вы можете писать по-разному ? От чего это например зависит ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042044
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.


SashaMercury, Вы можете задать этот вопрос самому BS - он отвечает, проверено )
Собственно, встречный вопрос: а зачем ему было их убирать? Напомню, в "самых истоках" C++ назывался "C with classes". Это было сделано, чтобы "заполучить" большую аудиторию программистов на С, а также большой объем кода (библиотек и пр.), который бы облегчал разработку на новом языке. А для этого нужно было обеспечить на сколько возможно полную совместимость с С. Что делать, если новые возможности сломают обратную совместимость? Это же потеря всех преимуществ. Классы. Изменение ограничения доступа по умолчанию (c public на private) - это ломающее обратную совместимость изменение. Но оно отражает переход от парадигмы "пользователь по умолчанию видит всё" к парадигме "пользователь видит только то, что мы ему явно разрешили (специфицировав публичный интерфейс)".
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042045
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ?Нет. Но существуют учебники. Читай про Simula & SmallTalk. Первая реализация ООП в Simula, но SmallTalk вывел ООП в люди.
Не существует научного доказательства которое делает ООП более правильной методологией разработки.
Нет также сравнительных практик или оценок качества ПО которые говорят о том что одно и то-же
приложение написанное в ООП стиле лучше чем не-ООП. Скорее наоборот. Миру являет бесконечное
разнообразие опенсорцного ПО которое было написано без использования ООП и тем не менее занесено
в "жемчужины" кодо-строения.

Да и само ООП в изложении различных авторов явно плывёт. Один термин "наследование" чего стоит.
Это одна из тем бесконечных холиваров. Особенно когда новичёк начинает проводить параллели
между inheritance и наследованием в генетике. Epic fail. Эпичны также топики о наследовании квадрата
от прямоугольника.

С моей точки зрения более интересным объектом для исследования являются макросы Lisp, монады,
комбинаторы и прочие сущности мира ФП. Они просты и гениальны в своей сути.

Я ООП воспринимаю просто как объективную реальность и "джентльменские" договрённости о кодинге
внутри проекта. У меня нет амбиций в части ООП и я легко соглашаюсь с альтернативными методами
декларации чего-либо в ООП коде. Просто я не видя изменений оценки o(n) считаю что речь идёт
просто о косметике или о внешнем виде исходника.

Из учебной программы ВУЗ-ов можно спокойно убрать ООП и это не изменит качество и разнообразие
кода выпускников этого ВУЗа.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042077
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?

Это зависит от. Страуструп говорит, что сейчас оставил бы только public и private. Protected в настоящее время слишком часто используется неправильно и приводит к плохому дизайну.

SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ?

Что такое Новая Трактовка? Лучше, если на пальцах и с примерами. А то не пойму, о чем речь.

SashaMercury1.4 Часто ли вы определяете объекты union в своих программах?

Этот объект по определению не может использоваться часто. Их законное использование
- экономия памяти при необходимости хранить два "больших", но примерно соразмерных объекта в одном участке памяти (не одновременно!). Типичный (и, наверное, самый распространённый) пример: small string/buffer optimization.
- переносимая реализация разных интерфейсов ("побитового" доступа) к "сырым данным". "Вытащить бинарь" можно и другими способами, но вот все они будут не столь переносимы (и могут то работать, то не работать, например, в зависимости от ключей компиляции, например, выравнивания и пр.).
- попытка "ручного" полиморфизма, когда хранится значение и "флаг типа значения", используемый при его интерпретации.

SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?

Как говорит тот же Страуструп, всякий новый инструмент проходит этап своего чрезмерного и неправильного использования. Просто люди (разработчики) так учатся его использовать. Если есть возможность, это не значит, что так надо делать всегда. Если есть ружьё, это не значит, что нужно выстрелить себе в ногу.

SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ?

Что-то у вас сумбурно.
В С (да и С++) есть понятие definition и declaration, которые наиболее часто переводят на русский как определение и объявление. Также есть связанное с ним понятие forward declaration. Так вот, эти понятия позволяют программисту отделить описание (интерфейса, declaration) от определения/реализации (definition), что есть хорошо.
Объявление позволяет
- выделить объявления в заголовочные файлы, при включении библиотек в проект не компилировать библиотеку всякий раз, как вы её включаете (справедливости ради, в новом стандарте С++17 для этих целей предлагаются модули)
- компилятору провести синтаксическую проверку Вашего кода, не требуя наличия реализации чужих зависимостей.

Иными совами, декларация (объявление) - это просто введение соответствующего имени (и его атрибутов) в пространство имён.
Определение - это точно указанная реализация. Понятно, что объявление и определение могут быть совмещены (особенно для коротких тривиальных функций). Ну и до кучи ещё один термин - создание экземпляра класса (создание объекта). Понятно, что у Вас будет (почти всегда) не один экземпляр класса, хотя только одно объявление и определение.


Про "представление класса". Очень сложно без контекста понять, о чём у Вас идёт речь, т.к. этот термин используется очень часто , и при том с разным смыслом. Без хрустального шара я бы сказал вам посмотреть паттерны (шаблоны проектирования) Model-View-Controller, Facade, Decorator. Эти термины существуют без привязки к языку, хотя и чаше всего встречаются в контексте Java...
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042127
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет.
В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.во, и пространства имён ему не угодили ))) эти то чем провинились?

SashaMercury - не слушай WhiteOwl, пространства имён полезны и удобны. Позволяют сократить код, разнести прикладную логику по собственным модулям и явно определяют зависимости между классами. Ну и облегчают именование программных объектов. Я пользуюсь постоянно.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042137
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?если я пишу простую POD-структуру, то использую правило доступа по умолчанию, во всех остальных случаях предпочитаю разбивать класс на логические куски, и для каждого прописывать явно уровни доступа:
Код: plaintext
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.
29.
30.
31.
class MyEvilClass
{
// конструирование
public:
    MyEvilClass( ... );
    ~MyEvilClass() {}
// копирование и присваивание запрещены
private:
   MyEvilClass( MyEvilClass );
   MyEvilClass & operator=( MyEvilClass );
// данные класса
private:
   ...
// методы доступа
public:
   ...
// чтение из файла
public:
    read( const std::string &infilename );
private:
    bool readString( ... );
    void parseString( ... );
// запись в файл
public:
    write( const std::string &outfilename );
private:
    prepareString( ... );

   ...

};  // class MyEvilClass
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042141
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.правильно рассуждаешь.

Потом почитай дизайн и эволюция С++ , там он отвечает на подобные вопросы, ну и вообще познавательно
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owlпропущено...
Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет.
В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.во, и пространства имён ему не угодили ))) эти то чем провинились?

SashaMercury - не слушай WhiteOwl, пространства имён полезны и удобны. Позволяют сократить код, разнести прикладную логику по собственным модулям и явно определяют зависимости между классами. Ну и облегчают именование программных объектов. Я пользуюсь постоянно.
В dotNet кажется уже ввели а в Java только в фазе обсуждений т.н. модуляризация или модульность Classes.
Это еще один из векторов деления функционала. Скорее всего ориентированного на быструю загрузку ядра
системы и прикладного кода а также на улучшение процесса управления исходным кодом на уровне merge
GIT/SVN/Mercurial.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042166
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марк, а разве в Java не package решает эту проблему ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042173
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga,
Это зависит от. Страуструп говорит, что сейчас оставил бы только public и private. Protected в настоящее время слишком часто используется неправильно и приводит к плохому дизайну.
Полностью поддерживаю. На одном из скрам-митингов в Java-проекте мы потратили несколько часов
яростных споров по поводу protected в части одного рефакторинга. Я был удручён. Был фикс во внутренние
документы касающиеся Code-Style agreement внутри team. И мы решили отказаться от явного использования
protected в данном проекте (в некотором скоупе).
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042210
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По 1.2 есть куда более простой и очевидный ответ - класс у которого все private в общем случае полностью бесполезен.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042223
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryМарк, а разве в Java не package решает эту проблему ?
Ммм.... не уверен.

Я навскидку не помню первоисточник. Но для начала лучше почитать эту статью
http://www.javaworld.com/article/2878952/java-platform/modularity-in-java-9.html
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042400
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.4 Часто ли вы определяете объекты union в своих программах?
Как класс, с методами - редко, но бывает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
union ip_header_t
{
    ip4_header_t v4;
    ip6_header_t v6;

    //helpers
    tcp_header_t *find_tcp_header();
    boost::uint16_t tot_len() const;
    boost::asio::ip::address saddr() const;
    boost::asio::ip::address daddr() const;
    boost::uint8_t version() const { return v4.version; }
};
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042410
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНикогда. Это абсолютно бессмысленный механизм.
Используется в качестве костыля для получения internal linkage типов в новых стандартах.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042413
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychне слушай WhiteOwl
Из тех что я видел, это лучший совет по изучению С++.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042579
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это.


Именно поэтому.

SashaMercuryПотому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.


А как тогда от них наследоваться, если это не классы ?


SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?


Абы как. чаще всего в больших классах есть три секции , private/protected/public, где и описываются соответств. члены.
Часто такие секции дублируются отдельно для данных.
Иногда секции множатся. Ничего страшного нет.

SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ?


Нет. Даже если есть проблемы -- они не скрытые, а явные. :-)


SashaMercury1.4 Часто ли вы определяете объекты union в своих программах?


Очень редко. UNION-ы должны быть POD, и не должны быть членами не POD классов (кажется, так по стандарту), поэтому их применение весьма ограничено в C++, фактически оно сводится к тем функциям, которые возложены на UNION в языке C.

SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?


Ну, пространство std используется очень часто. Также часто пространства boost-а.
Но вообще пространства имён нужны как воздух только для библиотечного кода, повторноиспользуемого. Там это-- must.
Но и то, до введения стандарта было настругано дофигища кода, и он как-то работал без неймспейсов. Некоторые люди по
старой традиции их вообще не используют в своём коде. Так что очень всё зависит от проекта.

SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ?


Это я не понял. Есть предварительное объявление класса, определение класса и реализация (методов и членов) класса.

SashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ?

Нет.
Существует стандарт, где дано определение, что такое ООП с точки зрения С++.

А так в разных языках очень разные бывают объектные модели.
Некоторые очень прикольные. :-)
Например, модель питона не подразумевает ограничений на состав членов класса, эти члены могут добавляться находу во время работы программы.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042586
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход.


Я хочу заметить, что " использование префиксов " в С не может решить данную проблему.
Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042786
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ?
Пойми одну простую вещь: С++ разрабатывается не по факту, а теоретиками. Теоретикам кажется что "может быть полезно то, может быть полезно сё". И они эту придумку сразу же запихивают в стандарт. Все радуются, но никто не использует.
Да, теоретически проблема namespace pollution может случиться. Когда-нибудь в будущем. В реальности она еще никогда не случалась, но теоретически она может случится.

А на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A.
В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo().

А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом?



SashaMercuryWhite Owl По нужде и желанию.Т.е. вы можете писать по-разному ? От чего это например зависит ?От нужды и желания.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042791
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorychне слушай WhiteOwl
Из тех что я видел, это лучший совет по изучению С++.Злые вы.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042828
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС моей точки зрения более интересным объектом для исследования являются макросы Lisp, монады,
комбинаторы и прочие сущности мира ФП. Они просты и гениальны в своей сути.

Я ООП воспринимаю просто как объективную реальность и "джентльменские" договрённости о кодинге
внутри проекта.
Я предполагаю, ты так думаешь потому, что хорошо знаешь ООП. А функциональщину пока не очень, вот она тебе и кажется круче.
Если бы наоборот, ты варился в предыдущие годы в мире ФП, а лишь недавно попробовал ООП, то высказывал бы (возможно) противоположные мысли: Я ФП воспринимаю как объективную реальность...
С моей точки зрения более интересны наследование, полиморфизм...


maytonИз учебной программы ВУЗ-ов можно спокойно убрать ООП и это не изменит качество и разнообразие
кода выпускников этого ВУЗа.
А вот с этим я согласен.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042830
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ dotNet кажется уже ввели а в Java только в фазе обсуждений т.н. модуляризация или модульность Classes.
Эмм... Имеются в виду частичные (разделённые) классы - partial class?

Это здорово облегчает совмещение автогенерированного кода с написанным вручную.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042849
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlAnatoly Moskovskyпропущено...

Из тех что я видел, это лучший совет по изучению С++.Злые вы.

А ты сам виноват. Приобрёл себе репутацию закоренелого олдскульного сишника -- так теперь не жалуйся.
Я и сам старый сишник, но зачем же жить всё время устарелыми категориями?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042854
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА ты сам виноват. Приобрёл себе репутацию закоренелого олдскульного сишника -- так теперь не жалуйся.Я не жалуюсь, я хихикаю.
MasterZivЯ и сам старый сишник, но зачем же жить всё время устарелыми категориями?Потому что в новых смысла нет. Вот "Си-с-классами" это хорошо. Все остальное можно смело удалять.
Все эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042855
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ?
Пойми одну простую вещь: С++ разрабатывается не по факту, а теоретиками.



Здрасте, приехали...
Вообще-то трудно найди другой такой практически-ориентированный язык, как С++.
Если бы речь шла о Java, то я бы понял, да, она такая (одно тупое отсутствие unsigned уже многого стоит), но о С++
ну никак такого нельзя сказать.

White Owl Теоретикам кажется что "может быть полезно то, может быть полезно сё". И они эту придумку сразу же запихивают в стандарт. Все радуются, но никто не использует.
Да, теоретически проблема namespace pollution может случиться. Когда-нибудь в будущем. В реальности она еще никогда не случалась, но теоретически она может случится.


О, как Анатолий был прав!!


White OwlА на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A.
В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo().

А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом?


Например, весь BOOST...
Но с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042859
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВсе эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться.


Отлично, ты вообще думаешь, что пишешь ?
С++ задуман так, что ты можешь расширять язык новыми типами данных.
Как это делать без переопределения операций?
Как реализовать тип std::complex без перегрузок операторов ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042873
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl... Вот "Си-с-классами" это хорошо. Все остальное можно смело удалять.
Все эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться.
Поддерживаю. "Си с сисклассами это норм", а "Си с шаблонами" редкое говно получилось.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги. Горячие эстонские модераторы. С наступающей тяпницей. Пыщ. Как обещал.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042876
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже считаю, что шаблоны в С++ появились зря, ну или в таком виде зря, но они реально прижились и решают много проблем.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042894
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение темы namespaces.

В настоящее время существует определённое засилье ns в исходном коде Java/.Net.
Здесь думаю что проблема - в отсутствии альтернатив и в неверных рекомендациях.
Там где можно было добавить префикс - создавали package. В результате имеем
тонны кода где Document в пределах 1 classfile может быть в роли xml-документа,
pdf-документа и еще бох весть каких пакетах. Большая часть учебных примеров
не компилируется просто по причине лени авторов которые не удосужились
привести секцию imports. А ведь кроме import есть еще и dependency в формате
maven/gradle/ivy. Где ошибёшся мажорной версией - не собирается.

Ужасны также рекомендации "столпов". Эккеля, Шилдта и Хорстмана. Что у них по поводу
ns? Они рекомендуют {web-domain-name}.{technology-name}. Или + {author-name}. Или {email}.
Это же ужас! Вы себе представляете если нужно конкурирующее имя Document
в 1-й функции в качестве аргумента указать ru.sql.xml.parser.mayton.Document.
а в качестве другого аргумента такую-же колбасу. Причём принципиально несократимую.
И ни алиас не синоним не работает! Нету typedef!

Но так исторически сложилось что С++ практически не имеет того ns-hell.
В бусте и СТД имена компактны. Не создают проблем.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042913
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВообще-то трудно найди другой такой практически-ориентированный язык, как С++.
Если бы речь шла о Java, то я бы понял, да, она такаяТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка.
С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем.
Но для практически ориентированных задач, если (не нужно делать версию для Андроида) я всегда предпочту С++ (а лучше Си). Исключительно по причине того что существующие фреймворки для C++ более разумно организованы чем их кузены для Java.

MasterZivО, как Анатолий был прав!!Да, он прав. Если меня запустить преподом в класс С++, то ученики выйдут ярыми сторонниками Си.


MasterZivWhite OwlА на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A.
В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo().

А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом?


Например, весь BOOST...Да? Ты хочешь сказать, что весь boost это фреймворк который сам дает программисту такой мизер что в дополнение к boost надо обязательно брать еще один фреймворк? А зачем тогда boost нужен?

MasterZivНо с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать.Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042924
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivWhite OwlВсе эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться.


Отлично, ты вообще думаешь, что пишешь ?
С++ задуман так, что ты можешь расширять язык новыми типами данных.
Как это делать без переопределения операций?Методами конечно. Зачем переопределять синтаксис?

MasterZivКак реализовать тип std::complex без перегрузок операторов ?Это не правильный вопрос. Правильный вопрос будет: как реализовать тип "комплексное число"?
Например так: https://msdn.microsoft.com/en-us/library/system.numerics.complex(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1
Или так: http://introcs.cs.princeton.edu/java/97data/Complex.java.html
Или перевести компилятор в режим С99, подключить complex.h и воспользоваться стандартным типом данных.
Не, если ты уже пишешь с использованием библиотеки std, то std::complex конечно будет напрашивающимся вариантом. Но если std по каким-то причинам (хотя бы религиозным) недоступна, то всегда можно сделать тип "комплексное число" по методу показанному для первокурсников Принстона.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042925
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlMasterZivНо с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать.Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка.мы похожее уже обсуждали в контексте перегрузки методов. Тебя ведь не напрягает, что классы у тебя будут называться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class DeliveryTransportBaseWidget : public MyEvilFrameworkWidget{};
class DeliveryTransportGrid : public DeliveryTransportBaseWidget{}; 
class DeliveryTransportModel : public MyEvilFrameworkModel{}
class DeliveryTransportView : public MyEvilFrameworkView{}

class DeliveryAccountsBaseWidget : public MyEvilFrameworkWidget{};
class DeliveryAccountsGrid : public DeliveryAccountsBaseWidget{}; 
class DeliveryAccountsModel : public MyEvilFrameworkModel{}
class DeliveryAccountsView : public MyEvilFrameworkView{}

//и т.д.

тебя ведь не убедишь, что так понятней и читабельней:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace delivery {

namespace transport {
class BaseWidget : public myevilframework::Widget {};
class Grid : public BaseWidget{};
class Model : public myevilframework::Model {};
class View : public myevilframework::View {};
}

namespace accounts {
class BaseWidget : public myevilframework::Widget {};
class Grid : public BaseWidget{};
class Model : public myevilframework::Model {};
class View : public myevilframework::View {};
}
}

ты же скажешь: "ну и что?"
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042934
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhite Owlпропущено...
Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка.мы похожее уже обсуждали в контексте перегрузки методов. Тебя ведь не напрягает, что классы у тебя будут называться:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class DeliveryTransportBaseWidget : public MyEvilFrameworkWidget{};
class DeliveryTransportGrid : public DeliveryTransportBaseWidget{}; 
class DeliveryTransportModel : public MyEvilFrameworkModel{}
class DeliveryTransportView : public MyEvilFrameworkView{}

class DeliveryAccountsBaseWidget : public MyEvilFrameworkWidget{};
class DeliveryAccountsGrid : public DeliveryAccountsBaseWidget{}; 
class DeliveryAccountsModel : public MyEvilFrameworkModel{}
class DeliveryAccountsView : public MyEvilFrameworkView{}

//и т.д.

тебя ведь не убедишь, что так понятней и читабельней:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
namespace delivery {

namespace transport {
class BaseWidget : public myevilframework::Widget {};
class Grid : public BaseWidget{};
class Model : public myevilframework::Model {};
class View : public myevilframework::View {};
}

namespace accounts {
class BaseWidget : public myevilframework::Widget {};
class Grid : public BaseWidget{};
class Model : public myevilframework::Model {};
class View : public myevilframework::View {};
}
}

ты же скажешь: "ну и что?"Скажу.

Потому что одними определениями дело не ограничивается. Классы надо не только определить, их еще и использовать надо. И получается что если я захочу одновременно использовать оба представленных View, то в первом случае я буду писать:
Код: plaintext
1.
2.
DeliveryTransportView *tView = new DeliveryTransportView();
DeliveryAccountsView *aView = new DeliveryAccountsView();



А во втором случае я буду писать:
Код: plaintext
1.
2.
delivery::transport::View *tView = new delivery::transport::View();
delivery::accounts::View *tView = new delivery::accounts::View();


либо
Код: plaintext
1.
2.
3.
using namspace delivery;
transport::View *tView = new transport::View();
accounts::View *tView = new accounts::View();


Ты точно уверен что используя namespace мы получили громадный выигрыш? И вообще что мы получили выигрыш хоть какой-нибудь?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042946
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychты же скажешь: "ну и что?"
А если ты решишь использовать свои классы вот так:
Код: plaintext
1.
2.
3.
4.
using namespace delivery::transport;
View *tView = new View();
using namespace delivery::accounts;
View *aView = new View();

то получишь верный путь к "стрельбе по собственным ногам".
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042947
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WhiteOwlИ получается что если я захочу одновременно использовать оба представленных Viewбудет такое место в программе, да. Ровно одно, в классе CentralWidget, и выглядеть оно будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
QActionList CentralWidget::createViews()
{
   ...
   typedef myevilframework::ActionFactory myFactory;
   return QActionList() <<
      myFactory::createView< delivery::transport::View >( ... ) <<
      myFactory::createView< delivery::accounts::View >( ... ) << 
      ... ;
}

;-))
это и к разговору о шаблонах относится, но ты и их не любишь ведь ;-))

White OwlТы точно уверен что используя namespace мы получили громадный выигрыш? И вообще что мы получили выигрыш хоть какой-нибудь?ну представь, что у тебя в этих классах методов по 15 в каждом. Ты файлы реализации хорошо представляешь себе?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042950
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlegorychты же скажешь: "ну и что?"
А если ты решишь использовать свои классы вот так:
Код: plaintext
1.
2.
3.
4.
using namespace delivery::transport;
View *tView = new View();
using namespace delivery::accounts;
View *aView = new View();

то получишь верный путь к "стрельбе по собственным ногам".ну уж нет, я фабрику нарисую. Банду четырёх читали, чай )))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042952
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWhiteOwlИ получается что если я захочу одновременно использовать оба представленных Viewбудет такое место в программе, да. Ровно одно, в классе CentralWidget, и выглядеть оно будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
QActionList CentralWidget::createViews()
{
   ...
   typedef myevilframework::ActionFactory myFactory;
   return QActionList() <<
      myFactory::createView< DeliveryTransportView >( ... ) <<
      myFactory::createView< DeliveryAccountsView >( ... ) << 
      ... ;
}

;-))
Ты все еще уверен что namespace дали тебе большой выигрыш?

egorychну представь, что у тебя в этих классах методов по 15 в каждом. Ты файлы реализации хорошо представляешь себе?А как реализация класса будет зависеть от того как класс именован???
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042961
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы все еще уверен что namespace дали тебе большой выигрыш?
...
А как реализация класса будет зависеть от того как класс именован???
ну ок
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
// DeliveryTransportView.cpp
void swap( DeliveryTransportView first, DeliveryTransportView second )
{
   ...
}
DeliveryTransportView::DeliveryTransportView()
{
   ...
}
DeliveryTransportView::DeliveryTransportView( ... )
{
   ...
}
DeliveryTransportView::DeliveryTransportView( const DeliveryTransportView &rhs )
{
   ...
}
DeliveryTransportView & operator=( DeliveryTransportView rhs )
{
   ...
}
DeliveryTransportView::~DeliveryTransportView()
{
   ...
}
void DeliveryTransportView::setDelegate( const DeliveryTransportDelegate &value )
{
   ...
}
DeliveryTransportDelegate & DeliveryTransportView::getDelegate() 
{
   ...
}
const DeliveryTransportDelegate & DeliveryTransportView::getDelegate() const
{
   ...
}
void DeliveryTransportView::setParent( const DeliveryTransportGrid &parent )
{
   ...
}
DeliveryTransportGrid & DeliveryTransportView::getParent() 
{
   ...
}
const DeliveryTransportGrid & DeliveryTransportView::getParent() const
{
   ...
}
void DeliveryTransportView::setModel( const DeliveryTransportModel &value )
{
   ...
}
DeliveryTransportModel & DeliveryTransportView::getModel()
{
   ...
}
const DeliveryTransportModel & DeliveryTransportView::getModel() const
{
   ...
}
// продолжать? не? до прикладной логики мы пока ещё даже не добрались

абсолютно уверен, да )))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042964
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychну оки даже здесь уже есть ошибка, найди её, попробуй-ка
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042975
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка.
С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем.


Как друг к другу соотносятся сущности и грамматика ?
Я не очень понимаю. Ну и лучше язык для программиста, чем язык для хорошей грамматики.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042977
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlКак это делать без переопределения операций?Методами конечно. Зачем переопределять синтаксис?
[/quot]

Чтобы формулы писать удобно было. И читать.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042980
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ребята, Совыча мы не переубедим....
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042984
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychпродолжать? не? до прикладной логики мы пока ещё даже не добралисьДа, если ты будешь использовать using namespace то, все эти имена слегка сократятся и может быть будет чуть легче читать.
Однако! Вот открыл ты в своем любимом текстовом редакторе/среде два файла, View из одного пространства имен и View из другого.
В обоих файлах у тебя в первой же строке (после include) стоят using namespace delivery::transport; и using namespace delivery::accounts; Оба файла промотаны на определение методов void View::setModel( const Model &value ) {}. В одном классе этот метод глючит, в другом нет.... А теперь быстро скажи: метод какого класса ты сейчас правишь? А если не мотать на начало файла?

egorychи даже здесь уже есть ошибка, найди её, попробуй-каЗачем я ее буду искать? Компилятор найдет.
Или ты думаешь что используя namespace ты от этой ошибки застрахован?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39042990
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivWhite OwlТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка.
С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем.


Как друг к другу соотносятся сущности и грамматика ?
Я не очень понимаю. Ну и лучше язык для программиста, чем язык для хорошей грамматики.Под "сущностями" я имел в виду языковые, алгоритмические, структурные концепции. То из чего ты конструируешь свою программу. Может слово "сущность" не очень подходит, но не могу сейчас придумать более лучшее. Примеры таких сущностей: namespace, exception, template, interface, class, union, thread, list, array, hash, socket... в языке для каждой из них может быть а может не быть поддержка на уровне грамматики.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39043102
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ обоих файлах у тебя в первой же строке (после include) стоят using namespace delivery::transport; и using namespace delivery::accounts; Оба файла промотаны на определение методов void View::setModel( const Model &value ) {}. В одном классе этот метод глючит, в другом нет.... А теперь быстро скажи: метод какого класса ты сейчас правишь? А если не мотать на начало файла?даже в DOS-редакторах был заголовок окна, вообще то. Это - помимо дополнительных подсказок, которые в студии распиханы на каждом углу. Но ты ведь и студии не любишь же ))

White Owlegorychи даже здесь уже есть ошибка, найди её, попробуй-каЗачем я ее буду искать? Компилятор найдет.
Или ты думаешь что используя namespace ты от этой ошибки застрахован?не найдёт, компилятору всё равно, что в функцию swap объекты передаются по значению, а не по ссылке. Ему это не мешает.
Я думаю, что делать ревью кода, не загромождённого повсеместными префиксами типа DeliveryTransport, MegaNevedomaFignya и прочими - удобней и эффективней, а неймспейсы позволяют мне избавиться от этой проблемы.

Всё ещё не пользуетесь пространствами имён? Тогда мы идём к вам! )))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39043104
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе, ребята, Совыча мы не переубедим....барьер, да, ты прав )))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39043194
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Друзья, да мы в топах !
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044576
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. К сожалению некоторые врем у меня не было возможности ответить.
И всё-таки по терминологии. Это важный вопрос
BS говорит о трёх вещах(как я понял):
1. class definition - определение, интерфейс типа данных определенного пользователем
2. class declaration - объявление, интерфейс типа данных определённого пользователем
3. representation - представлениея, реализация типа данных определенного пользователем

p225,226 BS
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044579
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivSashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход.


Я хочу заметить, что " использование префиксов " в С не может решить данную проблему.
Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек.

Почему не может ?
Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044588
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марк, зачитался вашей пламенной речью :) У Анатолия странный класс.
Спасибо всем за советы C:
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044591
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044599
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем
2. class declaration - объявление, интерфейс типа данных определённого пользователем
3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044604
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?мне нравится термин "тип", потому что в С++ это действительно - тип, с полностью определяемой семантикой, в том числе и за счёт того, что можно переопределить необходимые операторы.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044609
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychSashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем
2. class declaration - объявление, интерфейс типа данных определённого пользователем
3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле.

Я так и понял. Выше мне говорили противоположные вещи
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044620
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryА почему вообще "класс" ?
Наверно с легкой руки переводчиков книжек. Они много чего наизобретали в русскоязычной терминологии. Сейчас еще автопереводчики "помогают".
В C#, например, ушли от "класса" к "типу", но появились "значимые и ссылочные типы", долго голову ломал чего бы это значило, пока не понял что просто корявый перевод
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39044868
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryMasterZivпропущено...


Я хочу заметить, что " использование префиксов " в С не может решить данную проблему.
Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек.

Почему не может ?
Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить.

Именно потому , что закон легко нарушить.

Ты не можешь гарантировать, что все глобальные имена в программе у тебя будут уникальными, особенно если используешь много сторонних библиотек.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045004
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,
Код: plaintext
1.
2.
3.
4.
5.
class A;

class A {
  ...
};

Here are "forward declaration" of a class and its "definition".
Understood?

Representation is a little trickier to explain.
Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory.
You can also try looking up the definition of the word in encyclopedia.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045155
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury,
Код: plaintext
1.
2.
3.
4.
5.
class A;

class A {
  ...
};

Here are "forward declaration" of a class and its "definition".
Understood?

Representation is a little trickier to explain.

Чё эт ты, раскладку клавиатуры вовремя не успел переключить ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045224
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?
Некоторые протаскивают понятие "прототип". Еще иногда в качестве interface пишут "стеретип".
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045256
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?
Не надо иначе.
В С++ класс - это устоявшееся название для пользовательского типа.
Особенно учитывая что в синтаксисе именно так эта сущность и зовется.

Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045258
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Scala ввели понятие trait. Вместо интерфейса. Зачем надо - ХЗ. Еще не разбирался.
Идеология ть ее так. Подготавливают почву значить для адептов.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045276
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Обероне - "модули" вместо классов.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045396
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ Обероне - "модули" вместо классов.А в Перле - пакеты.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045398
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercury,
Код: plaintext
1.
2.
3.
4.
5.
class A;

class A {
  ...
};

Here are "forward declaration" of a class and its "definition".
Understood?

Representation is a little trickier to explain.
Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory.
You can also try looking up the definition of the word in encyclopedia.

На w такие серьезные вопросы смотреть не буду. В целом она мне не нравится, и пользуюсь ей крайне редко.
Для того чтобы объяснить что такое представление класса лучше всего подходит/требуется именно такая ситуация ?


Вот что говорит стандарт С++. 9.1 Class name

1. p216 A class definition introduces a new type.
Нет замечаний о том, даётся ли только интерфейс класса, либо более.

2. p216-217 A class declaration introduces the class name into the scope where it is declared and hides any class, variable, function, or other declaration of that name in enclosing scope.

Далее идут рассуждения об области видимости, не более. Да и определение того что такое class declaration дано в контексте области видимости.
А ещё ниже приведён такой пример. p219
A simple example of s calss definition is
Код: plaintext
1.
2.
3.
4.
5.
6.
struct tnode {
   char tword[20];
   int count;
   tnode *left;
   tnode *right;
};



Once this definition has been given, the declaration
Код: plaintext
1.
tnode s,*sp;


...
Таким образом можно сделать вывод о том, что declaration понимается стандартом только в контексте области видимости и объявлении экземпляров класса.

Пока никакой информации о repersentation нет вообще. Зато в 9.3 Member function
1. Function declared in the definition of a class, excluding those declared with a friend specifier are called member function of that class. Далее
2.A member function may be defined in its class definition, in which case it is an inline member function, or it maybe defined outside of its class definition if it has already been declared but not defined in its class definition.


Можно сделать следующие выводы:
1. class definition есть определение нового пользовательского типа данных.
2. class definition может содержать в себе как прототипы member functions так и реализации member functions.
3. термин class declaration имеет отношение к области видимости, и объявлению объектов классов
4. термин class representation не имеет специального значения согласно стандарту С++.


Если кто-то не согласен с данными выводами, скажите об этом пожалуйста
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045399
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?
Не надо иначе.
В С++ класс - это устоявшееся название для пользовательского типа.
Особенно учитывая что в синтаксисе именно так эта сущность и зовется.

Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе.

В таком случае согласен и принимаю это название
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39045476
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SashaMercury4. термин class representation не имеет специального значения согласно стандарту С++.[/quot]во, так и есть.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39046154
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашик давай качай скиллы в 3D-графике. Кури векторные операции.

Фигли тут ковырять грязь из под ногтей... Всё равно земля крутится и солнце светит.
От того что класс незвать не классом ничо не изменится.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39050538
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :)

Последнюю половину прошедшей недели я потратил на ту программу-поздравление, и потому ООП не занимался. Но сегодня утром продолжил. У меня вновь возникли вопросы, подскажите пожалуйста

1. BS пишет:
The protection of private data relies on restriction of the use of the class member names. It can therefore be circumvented by address manipulation and explicit type conversion. But this, of course, is cheating. C++ protects against accident rather than deliberate circumvention(fraud). Only hardware can protect against malicious use of general-purpose language, and even that is hard to do in realistic systems.

1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ?
1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ?
1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ?

2.1 Правильный ли вывод: При разработке ПО желательно инициализировать объекты при их создании. В ООП каждый объект должен быть проинициализирован при создании. Можно ли считать это одной из важны деталей ООП ?
2.2 В каком-то случае мы решили что создадим объект и только потом проинициализируем. Что делать с дополнительными затратами на инициализацию при создании объекта, в которой нет необходимости.
2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ?
2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39050552
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :)

Вопросы есть. Создатель приложения Пол Гекберт (без названия) которое я назвал CardRaytracer
был хитёр и использовал упрощённую модель мира. В частности я не нашёл
матрицу аффинных преобразований для камеры и для объектов. Еще опытным
путём установил что шары ортогональны к направлению квадратной плитки
и это действительно хардкод. Независимо их крутить безе переделки ПО
невозможно. Могу предположить что ориентируя объекты вдоль орт X,Y,Z
Пол Гекберт получал нулевые коэффициенты матриц и просто выбрасывал
из модели мира целые куски уравнений. Таким образом он упрощал объём кода.

Собственно вопросы.

1) Где находится камера ? Куда она ориентирована?
2) Базовые трансформации объектов. Шары. Плиточный пол. Точечный источник света. Где. Как. Как управлять?
Где pivot ? Где масштаб ? Где углы поворота по эйлеру. Или матрица ВСЕХ трансформаций.
3) Ambient (горизонт, небо). Как управлять.

У меня нет планов менять базовую постановку. Ребята наколбасили огромный объём кода вручную.
И этот результат будет зафиксирован как финальный.

Но на будущее хотелось-бы узнать пару технических приёмов и возможно заюзать их в Game Development-е.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39050580
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ?

Проверка происходит на этапе синтаксического анализа, т.к. обращение на недоступной 'private'-области с точки зрения проверки ничем не отличается от доступа, например, к несуществующему члену.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39050585
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ?


Код: plaintext
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.
#include <iostream>
using namespace std;

class A{
    public:
      A():pub(10), hidden(100){};
      int pub;
      void tell_hidden(){std::cout << "Hidden is " 
                                   << this->hidden << '\n';}
    private:
      int hidden;
};


int main()
{
    A a;
    a.tell_hidden();
    
    *((reinterpret_cast<int*>(&a))+1) = 777;
    
    a.tell_hidden();
   
   return 0;
}



SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ?

Никак. Этот код - UB, и в любой момент может выстрелить в ногу написавшего. С++ пытается предотвратить случайный выстрел, но если кто-то очень упорен, и говорит компилятору "не лезь, я знаю, что делаю" ... в конце-концов, это его.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39050601
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury wrote
>>1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ?[/quot]
Код: plaintext
1.
2.
3.
4.
class A { int a; int b; };
A val;
unsigned char *ptr = reinterpret_cast< unsigned char * >( &val );
ptr += 4;  // ну вот, куда-то я попал


>>1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ?
мозг ))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051181
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ?

Pimpl .
SashaMercury2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ?

Из сегодняшнего: есть базовый класс, в котором один конструктор с одним параметром, для которого указано значение по умолчанию, и есть производный класс, у которого нетривиальный конструктор без параметров. Явного вызова конструктора предка в производном классе нет. gcc компилит нормально,
вижуал студия ругается, мол, no accessible constructor.
SashaMercury2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар.
Синтаксис конструкторов вообще отличается: во-первых, у них нет имён, во-вторых, как следствие первого, у них нельзя взять адрес
или явно вызвать. Зачем это сделано - тут уже простор для спекуляций. Вон в Дельфи это не так, и вроде никаких особых проблем.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051255
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury2.1 Правильный ли вывод: При разработке ПО желательно инициализировать объекты при их создании. В ООП каждый объект должен быть проинициализирован при создании. Можно ли считать это одной из важны деталей ООП ?

Хорошим тоном сейчас является RAII . Предполагается, что для отказа от данного принципа в каждом конкретном случае должны быть очень веские и явно и четко формулируемые причины. Одной из таких может быть "дороговизна" операции инициализации. Как говорится, делайте так, если у Вас нет _веских_ причин делать иначе...
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051257
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MozokSashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ?

Pimpl .


Я не уверен, что именно защита от "целеустремлённого настойчивого буратины". Для особо настойчивых просто добавляется необходимость взятия ещё одного адреса расчёта смещения. Мне кажется, что гораздо более существенными фишками этой техники являются (b) adding new data members to the private struct does not affect binary compatibility; (c) the header file containing the class declaration only needs to #include those other files needed for the class interface, rather than for its implementation. One side benefit is that compilations are faster because the header file changes less often. . Что, собственно, есть способ отделения интерфейса от реализации (без болезней типа необходимости пересобрать всё-всё только из-за изменения одной строчки в хедере).
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051346
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

BS пишет:
A constructor is recognized by having the same name as the class itself.
И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит.

Однако в стандарте действительно(как сказал выше Mozok ) сказано:
Constructor do not have names.

Согласно стандарту существует специальный синтаксис объявления конструктора. Не читал далее, но вероятнее всего такой синтаксис существует для всех special member function.
Mozok, всё что вы сказали, я понял, несмотря на то, что не до конца понимаю причину некоторых вещей, но она видимо глубже нежели анализ конструкторов. Но вы также говорите что нельзя конструктор явно вызывать. Как я понял, реализация может неявно определить все или некоторые special member function в том случае, если они не определены явно разработчиком. В таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров. Разве в данном случае это не будет явным вызовом конструктора по умолчанию ? Читая стандарт, мне показалось что смысловая нагрузка слов: имплицитно и эксплицитно в контексте ООП в С++ несколько иная. Или ошибаюсь ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051356
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЗдравствуйте.

BS пишет:
A constructor is recognized by having the same name as the class itself.
И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит.

Однако в стандарте действительно(как сказал выше Mozok ) сказано:
Constructor do not have names.

Согласно стандарту существует специальный синтаксис объявления конструктора.И что тебя смущает? В одном случае говорится про определение, в другом про представление.


SashaMercuryКак я понял, реализация может неявно определить все или некоторые special member function в том случае, если они не определены явно разработчиком.Реализация ничего определить не может. По определению самой реализации. А вот компилятор действительно делает реализацию всех недостающих обязательных членов класса.

SashaMercury В таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров. Разве в данном случае это не будет явным вызовом конструктора по умолчанию ?Не существует "конструктора по умолчанию". Есть просто разные конструкторы, с параметрами и без. А какой из них будет вызван зависит от уже от того как ты будешь создавать объект.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051365
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlSashaMercuryЗдравствуйте.

BS пишет:
A constructor is recognized by having the same name as the class itself.
И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит.

Однако в стандарте действительно(как сказал выше Mozok ) сказано:
Constructor do not have names.

Согласно стандарту существует специальный синтаксис объявления конструктора.И что тебя смущает? В одном случае говорится про определение, в другом про представление.



В стандарте нет определения того, что такое представление, что вы имеете ввиду и почему используете этот термин ? Меня смущает, что слова name и constructor находятся в одном предложении, и это не предложение Constructor do not have names. И такое не только у BS. В стандарте чётко написано:
Constructors do not have names. A special declarator syntax is used to declare or define the constructor. Потому не надо ассоциировать имя класса и конструктор. У конструктора нет имени, существует только синтаксис определения и объявления конструктора.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051366
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Реализация ничего определить не может. По определению самой реализации. А вот компилятор действительно делает реализацию всех недостающих обязательных членов класса.

Тогда как вы переведёте такую фразу, fe:
ISO/IEC N3242=11-0012 12.1 Special member functionsThe implementation will implicitly declare these members functions for some class types when the program does not explicitly declare them. The implementation will implicitly defined them if they are odr-use.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051387
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Не существует "конструктора по умолчанию".
В стандарте описан default constructor.
A default constructor for a class X is constructor of class X that can be called without an argument.



Единственное что меня смущает, я выделил красным. Видимо реализация языка в VS не совсем корректная, ибо они реализовали не can be, a must be. Такой код, например, выдаст ошибку на этапе компиляции

Код: plaintext
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.
#include <stdio.h>

class X
{
	int value;
public:
	X();
	void print();
};

X::X()
{
	value = 10;
}

void X::print()
{
	printf("value=%i\n", value);
}

int main()
{
	X x();
	x.print();
	return 0;
}
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051396
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скобки убери, тогда скомпилируется.
Код: plaintext
1.
X x;
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051397
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, я не так понял. В стандарте написано о том, что вызов может быть без аргументов. Так он и должен быть без аргументов. Но и синтаксис вызова должен быть иной. Вот так.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051401
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСкобки убери, тогда
Код: plaintext
1.
2.
3.
[/SRC] скомпилируется.
[src c++]
X x;



Безусловно. Изначально подумал что и такой синтаксис должен работать
Код: plaintext
1.
X x();
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051455
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryИзначально подумал что и такой синтаксис должен работать
Код: plaintext
1.
X x();


Тоже вполне нормальный код - объявление функции, возвращающей X.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051489
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstSashaMercuryИзначально подумал что и такой синтаксис должен работать
Код: plaintext
1.
X x();


Тоже вполне нормальный код - объявление функции, возвращающей X.

Вероятно поэтому синтаксис использования конструктора по умолчанию имеет такой вид X x.3048
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051495
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВероятно поэтому синтаксис использования конструктора по умолчанию имеет такой вид X xне вероятно - очевидно ))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051623
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю топик и меня не покидает ощущение вязкого затягивающего кошмара.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051697
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЧитаю топик и меня не покидает ощущение вязкого затягивающего кошмара.

Почему ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051710
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВ стандарте нет определения того, что такое представление, что вы имеете ввиду и почему используете этот термин ?
Термин «представление» в мире С++ не используется. Есть «объявление (declaration)» и «определение (definition)». Они могут совпадать в коде.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051716
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНо вы также говорите что нельзя конструктор явно вызывать.
Можно и так всегда делают. Более того:

- Можно вызвать конструктор повторно.
- Конструктор можно явно вызвать для произвольного участка памяти.
- Можно явно вызвать деструктор.

Но это редко нужно и требует серьезного обоснования и глубоких знаний.

SashaMercuryВ таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров.
Что такое «fe»? :)
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051844
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonЧитаю топик и меня не покидает ощущение вязкого затягивающего кошмара.

Почему ?
Обычно топик заканчивается либо решением проблемы. Либо каждый для себя делает выводы.
А тут - философский пинг-понг. Что то тип:

Код: plaintext
1.
2.
3.
4.
5.
6.
Разраб№1 : А я вот люблю есть опилки.
Разраб№2 : Опилки?  Ты что! Их же не рекомендует минздрав.
Разраб№1 : А если их сварить? Ничо так.
Разраб№3 : Я тоже иногда ем опилки. Они красиво выглядят. А хлеб - некрасиво.
Разраб№4 : Но если хлеб посыпать опилками то ничо так.
mayton : Какого хрена тут вообще происходит!!!!?????
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39051848
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot mayton
Код: plaintext
1.
2.
3.
4.
5.
6.
Разраб№1 : А я вот люблю есть опилки.
Разраб№2 : Опилки?  Ты что! Их же не рекомендует минздрав.
Разраб№1 : А если их сварить? Ничо так.
Разраб№3 : Я тоже иногда ем опилки. Они красиво выглядят. А хлеб - некрасиво.
Разраб№4 : Но если хлеб посыпать опилками то ничо так.
mayton : Какого хрена тут вообще происходит!!!!?????


[/quot]тебе отсыпать опилок? ;) у меня свежие есть )))
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052198
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav- Можно вызвать конструктор повторно.

Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java.
petrav- Конструктор можно явно вызвать для произвольного участка памяти.

И это как? placement new не предлагать, это вызов operator new, а не коструктора.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052206
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так placement new и есть только вызов конструктора.
n4527.pdf§18.4.​1.3 Placement forms
These functions are reserved, a C++ program may not define functions that displace the versions in the Standard C++ library.
...
void* operator new(std::size_t size, void* ptr) noexcept;
Returns: ptr.
Remarks: Intentionally performs no other action.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052208
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokpetrav- Можно вызвать конструктор повторно.

Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java.
petrav- Конструктор можно явно вызвать для произвольного участка памяти.

И это как? placement new не предлагать, это вызов operator new, а не коструктора.

placement new -- это как раз вызов конструктора, а не operator new.
operator new -- это создание объекта в памяти (выделение памяти) и затем его инициализация путём вызова одного из конструкторов.
placement new -- напротив, только инициализация объекта в памяти путём вызова одного из конструкторов .
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052277
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokpetrav- Можно вызвать конструктор повторно.

Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java.
petrav- Конструктор можно явно вызвать для произвольного участка памяти.

И это как? placement new не предлагать, это вызов operator new, а не коструктора.
Вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
#include <iostream>
using namespace std;

class Foo
{
public:
	Foo(): m_i()   {}
	Foo( int const a_i ): m_i( a_i )   {}
	~Foo()   { m_i = int(); }
private:
	int m_i;
};

int main()
{
	Foo f; // Конструктор по умолчанию.
	new (&f) Foo(); // Повторный вызов конструктора по уполчанию.
	new (&f) Foo( 1 ); // Повторный вызов конструктора с параметрами.
	f.~Foo(); // Явный вызов деструктора.

	return 0;
	// Ооопс! Еще один вызов деструктора!
}


Я, правда, считал, что можно напрямую вызвать конструктор как-то так:
Код: plaintext
1.
f.Foo::Foo();


Не компилируется, но это ничего не меняет.

Что там с цепочками в Яве я не знаю. :(
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052292
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЧто там с цепочками в Яве я не знаю. :(
Что за цепочки? "Method chaining"?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052296
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravЧто там с цепочками в Яве я не знаю. :(
Что за цепочки? "Method chaining"?
Я не знаю что имелось в виду. Нужно уточнить у Mozok.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052297
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmaytonпропущено...

Что за цепочки? "Method chaining"?
Я не знаю что имелось в виду. Нужно уточнить у Mozok.
Как дела кст. Заходи в наш бенчмарк. Прокашляем вопросы перформанса на сях.
Заодно обсудим планы на будущее. Бенчмарк I/O и использование memory.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052316
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstТак placement new и есть только вызов конструктора.

MasterZivplacement new -- это как раз вызов конструктора, а не operator new.

Ну началось. Так и знал. placement new - это всего лишь способ передать дополнительные аргументы
в функцию выделения памяти. Даже если используется неперегружаемая версия, как у petrav в примере,
объект полностью создаётся с нуля в указанной области, а не просто вызывается конструктор. Отличие
в вызове констукторов предков и полей.
Код: plaintext
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.
29.
30.
31.
32.
33.
#include <iostream>
#include <string>

using namespace std;

class Foo
{
public:
	Foo() {
		cout << m_s << endl;
	}
	
	Foo( string const& a_i ) {
		cout << m_s << endl;
		m_s = a_i;
	}
	~Foo()   { m_s = string(); }
	string m_s;
};

int main()
{
	Foo f; // Конструктор по умолчанию.
	f.m_s = "Bar";
	new (&f) Foo(); // Пустой вывод. Объект полностью пересоздан.
	f.m_s = "Bar";
	new (&f) Foo( "1" ); // Пустой вывод. Объект полностью пересоздан.
	f.m_s = "Bar";
	f.~Foo(); // Явный вызов деструктора.

	return 0;
	// Ооопс! Еще один вызов деструктора!
}



maytonЧто за цепочки? "Method chaining"?

Имелось в виду
Код: plaintext
1.
	Foo() : Foo("") {} 


Оно же delegating constructors.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052336
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MozokДаже если используется неперегружаемая версия, как у petrav в примере,
объект полностью создаётся с нуля в указанной области, а не просто вызывается конструктор. Отличие
в вызове констукторов предков и полей.
После таких слов даже Ваш код рассматривать не хочется.

Вызов конструктора — это и есть создание объекта с нуля. Других вариантов нет. Не рассматриваем сгенерированное исключение в конструкторе — это отдельная тема.

Отличия в вызове конструкторов предков и полей данных нет никакого.

Конструктор конструирует объект. В данной области памяти. С вызовом конструкторов предков и полей. И всё. Просто new перед этим выделяет память для объекта, а в случае placement new мы сами обязаны выделить память.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052338
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok...
А не… Всё же посмотрел Ваш код.

Там вы дважды допустили утечку памяти. Плюс, возможно, в конце уронили приложение — зависит от реализации класса std::string — хотя тут могут быть тонкости. Это к Московскому.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052341
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravпропущено...

Я не знаю что имелось в виду. Нужно уточнить у Mozok.
Как дела кст. Заходи в наш бенчмарк. Прокашляем вопросы перформанса на сях.
Заодно обсудим планы на будущее. Бенчмарк I/O и использование memory.
Как дела? Я две недели на южном море был. Хорошо что ты не ответил в нашем споре о применимости языков. Пустой был спор.

А какой такой «наш бенчмарк»? Это тема «Тяпничный бенчмарк CPU (part-1)» в разделе «Программирование», где вы меряетесь производительностью .NET и Java?

Ну так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов).
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052342
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaMozokпропущено...

Pimpl .


Я не уверен, что именно защита от "целеустремлённого настойчивого буратины". Для особо настойчивых просто добавляется необходимость взятия ещё одного адреса расчёта смещения. Мне кажется, что гораздо более существенными фишками этой техники являются (b) adding new data members to the private struct does not affect binary compatibility; (c) the header file containing the class declaration only needs to #include those other files needed for the class interface, rather than for its implementation. One side benefit is that compilations are faster because the header file changes less often. . Что, собственно, есть способ отделения интерфейса от реализации (без болезней типа необходимости пересобрать всё-всё только из-за изменения одной строчки в хедере).

Почитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052343
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, скажу честно, идея с использованием непрозрачных указателей мне кажется очень даже симпатичной. Вы используете данную технологию в своих реальных программах ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052346
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОбычно топик заканчивается либо решением проблемы. Либо каждый для себя делает выводы.
А тут - философский пинг-понг.

Марк, у нас такого тут нет :)

petrav Что такое «fe»? :)

for example. Редко, но такое сокращение можно встретить. Как правило сокращают используя латинское e. g.(exempli gratia), но мне почему-то больше нравится первый вариант :)

PS
Прошу всех ни в коем случае не ругаться вновь по поводу прошлых обсуждений касаемо Java и других вещей не связанных с ООП на С++.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052348
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПочитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ?
Pimpl.

Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип».

Вот так:
Код: plaintext
1.
2.
class Foo;
Foo *fooPtr = nullptr;


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

В С++ не существует способа защиты памяти объектов класса. Всегда можно грязными методами достучаться до чего угодно. При желании.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052349
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип».

Но ведь существует в стандарте определение incomplete type, потому так и перевёл. Тогда уж лучше говорить оперируя английскими терминами, чтобы не запутаться в переводе слов в России
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052350
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЭто указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип».
Точнее даже «предобъявленный тип» не говорят. Говорят «предобъявленный класс», «предобъявленный union» и «предобъявленная стуктура».
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052351
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurypetrav Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип».

Но ведь существует в стандарте определение incomplete type, потому так и перевёл. Тогда уж лучше говорить оперируя английскими терминами, чтобы не запутаться в переводе слов в России
Ну, Вам нужно стать уважаемым автором книг по С++ на русском языке. Или хотя бы уважаемым переводчиком. Тогда сможете повлиять на лексику С++ в русском изложении.

А то так и появляются фразы «представление в С++» и никто не может понять что это.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052364
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav А то так и появляются фразы «представление в С++» и никто не может понять что это.

Ну это собственно появилось у BS :)
Но в стандарте такого термина действительно нет. Выше я приводил цитаты как из стандарта так и из BS
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052398
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot SashaMercury]BagaBagaпропущено...
...
Почитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ?

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

Компилятору нужно знать сигнатуры тех объектов, с которыми он работает. Реализацию ему знать необязательно (не везде). Для того, чтобы ввести что-то в пространство имён, используется forward declaration (по-русски оно звучит как "предварительное объявление" или, иногда, ооочень иногда именуемое также как "опережающее объявление"). Именно это вы и видите. Внутри класса сделано локальное предварительное объявление типа. Если угодно, включая любой заголовочный файл вы тем самым вводите в свое пространство имен множество предварительных объявлений. Где-то в другом месте обязана находиться реализация (не обязательно, к стати, в исходниках - это вполне могут быть бинарные библиотеки). Так вот, это предварительное объявление позволяет компилятору убедиться в синтаксической правильности программы. Если же вы обманули компилятор и не дали ему реализации - на вас заругается линкер на этапе линковки объектных файлов, или, в более разумном случае, тот же компилятор пропоет про что-нибудь 'not found', но _на_более_поздних_этапах. Механизм предварительных объявлений позволяет отделить объявления (интерфейс) от определения (реализации) и избежать необходимости кучу раз перекомпилировать один и тот же код.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052407
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravНу так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов).
Это сарказм был по поводу "винчестер и магнитная лента" ?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052426
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBaga, понял, спасибо. У меня есть книга BS на русском языке (хотя английский там несложный, и я предпочитаю английский вариант). Посмотрю что написано в ней(в русском варианте). Есть Лафоре и Павловская, кроме того. Но лучше у BS. У него лучше всего написано
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052799
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravНу так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов).
Это сарказм был по поводу "винчестер и магнитная лента" ?
Даже интересно где же ты в моих словах заподозрил сарказм?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052802
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurypetrav А то так и появляются фразы «представление в С++» и никто не может понять что это.

Ну это собственно появилось у BS :)
Но в стандарте такого термина действительно нет. Выше я приводил цитаты как из стандарта так и из BS
Страуструп использует термин «представление»? Не верю. :-Р
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052842
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmaytonпропущено...

Это сарказм был по поводу "винчестер и магнитная лента" ?
Даже интересно где же ты в моих словах заподозрил сарказм?
У меня просто слов нет. По поводу магнитной ленты. Я не знаю где. В какой предметной области.
В каких задачах. У разработчика на С++ вдруг вдруг внезапно (!) появится задача
что-то кодить и иметь в виду устройством вывода /dev/st или ему подобное.
В скобках замечу что я сам бэкапил много чего но это задачи рода админских
а не девелоперских.

Поэтому мне остаётся только всплеснуть руками.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052899
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravпропущено...

Даже интересно где же ты в моих словах заподозрил сарказм?
У меня просто слов нет. По поводу магнитной ленты. Я не знаю где. В какой предметной области.
В каких задачах. У разработчика на С++ вдруг вдруг внезапно (!) появится задача
что-то кодить и иметь в виду устройством вывода /dev/st или ему подобное.
В скобках замечу что я сам бэкапил много чего но это задачи рода админских
а не девелоперских.
А кто по твоему разработал инструменты (программы) которыми пользуются админы? АС Пушкин — лётчик?

Я могу ошибаться, но насколько я знаю магнитная лента и сейчас живее всех живых. Очень дёшево и очень надёжно для огромных объёмов данных. Бекапы корпоративного уровня. Но очень медленно.

maytonПоэтому мне остаётся только всплеснуть руками.
Да уж. Магнитная лента — старый конь борозды не портит .
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052902
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка.

Ты знаком с интернет-мемом «Ява не тормозит»? Про ту машину слышал?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052945
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Кстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец .

Последнее время, правда, заменяется на флешки. Но вот усилят нам санкции и такой же как я человек в России будет на Си/С++ писать драйвер для устройства с магнитной лентой. Будет даже надёжнее флешки, например, в плане устойчивости к радиации.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39052982
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravКстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец .

Последнее время, правда, заменяется на флешки.
да ты шо?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053045
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmayton,

Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка.


Я не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе
состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность
в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов.

Почитай ради интереса про Disruptor к примеру.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravmayton

Кстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец .

Последнее время, правда, заменяется на флешки. Но вот усилят нам санкции и такой же как я человек в России будет на Си/С++ писать драйвер для устройства с магнитной лентой. Будет даже надёжнее флешки, например, в плане устойчивости к радиации.
Я возможно покажусь консервативным но я за то чтобы писать на проволоку. Когда речь идёт о
восстановлении инфы из этих ваших чёрных ящиков то аналоговая (по сути) запись даёт
возможность восстановить хоть что-то. Да и катушка с проволокой от удара об землю остаётся
катушкой.

Флешка в самописце - это игра в рулетку. Наеб..тся и вообще ни бита не восстановят.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053073
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravmayton,

Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка.


Я не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе
состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность
в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов.
Я с тобой абсолютно согласен (кроме приближения к С++). Но я в который раз тебе указываю на некоторую узость твоего мировосприятия. Это ни в коем случае не намёк на дилетантизм! Но ты всё меряешь и воспринимаешь только в контексте бизнес-процессов (энтерпрайз), а мир программирования гораздо шире. Я уж не говорю про то, что в энтерпрайзе производительность никогда не была ключевой проблемой. А в тех подзадачах энтерпрайза где всё же нужна производительность — там почти всё написано на С++ (MS SQL, MySQL, MongoDB).

maytonПочитай ради интереса про Disruptor к примеру.
Да зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:)

Каждой задаче — свой инструмент. Я совершенно не против ВМ.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЯ могу ошибаться, но насколько я знаю магнитная лента и сейчас живее всех живых. Очень дёшево и очень надёжно для огромных объёмов данных. Бекапы корпоративного уровня. Но очень медленно.

Она живее всех живых я гарантирую это. По поводу скорости. В смежном форуме по ораклу обсуждалась
тема как уберечь пул стриммеров в ленточной библиотеке от перемотки назад. Основной трабл был в том
что ленточная библиотека была .... кхм... как-бе это сказать. Слишком быстрой.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053081
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravДа зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:)

А в чём она улучшеная? Назови метрику. Или какой-то индекс. По чём она лучше?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053087
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Чем ява".
Есть у человека пунктик - можно вытесать кол на его голове, но пунктик всё равно останется.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053092
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petravmayton,
Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка.
Ленивый человек всегда оправдание найдет, лишь бы ничего нового не изучать и не использовать.

maytonЯ не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе
состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность
в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов.

Почитай ради интереса про Disruptor к примеру.
- Пропускная способность ( bandwidth ) измеряется в гигабайтах/гигабитах в секунду , но не в мегафлопах.
- В мегафлопсах измеряется производительность ( performance ).
- На синтетических теста BLAS(Linpack/Lapack/HPL/...), где не требуется многократное выделение памяти и по которым меряется количество мегафлопсов, ява никогда по производительности не показывала меньше мегафлопсов, чем С++ .
- Дизраптор (disruptor) оптимизированный конвейерный кольцевой буфер, который обеспечивает минимальную задержку ( latency ), но не имеет отношения ни к производительности, ни к пропускной способности, т.к. показывает их значения в разы меньше теоретической.

Bandwidth, latency и performance - 3 разных характеристики системы, которые обеспечиваются разными подходами и измеряются разными тестами.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053094
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин, спасибо бро. Даже не знаю что еще сказать. К слову я прекрасно знаю в чём
меряется perfromance и скорость канала. Просто я в душе поэт и люблю метафоры.

По Disruptor я так понимаю ты, как и я посмотрел видео презентацию в youtube?

P.S. Зарегайся что-ли.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053097
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так хорошо всё начиналось, Страуструпа обсуждали, конструкторы, placement new... И вдруг опять они со своей Жабой тут.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053103
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetravДа зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:)

А в чём она улучшеная? Назови метрику. Или какой-то индекс. По чём она лучше?
Метрики, индексы и магия сейчас не рулят. Сейчас рулят танковые клинья и ковровые бомбардировки. © Гоблин. :) Ну я же там написал «показал язык:)». Понятно, что шуткой было моё заявление, мол .NET — это улучшенная Java. Ты очень серьёзный человек. Но в каждой шутке есть доля правды.

Спорить об этом я не могу. С языка C# спрыгнул более 5-ти лет назад. Про Java только читал. Но считается, что .NET производительнее, а C# гибче чем Java.

Ну попробуем.

- Есть ли в Java инструмент аналогичный C# Reflection?
- Есть ли в Java прямой доступ к памяти? Аналог unsafe в C#.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053116
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин- На синтетических теста BLAS(Linpack/Lapack/HPL/...), где не требуется многократное выделение памяти и по которым меряется количество мегафлопсов, ява никогда по производительности не показывала меньше мегафлопсов, чем С++ .
Ну-ну. Вы издеваетесь? Уже и память выделять не нужно? Про union и RAII мне уже отвечали, что они не нужны. Что не попроси от явистов — нам это не нужно!

Меньше у них мегафлопсов не было, видите ли. Ваш беспилотный автомобиль, управляемый программой на Яве, на крейсерской скорости въехал в бетонную стену. Вот тогда и появился интернет-мем «Java не тормозит».
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053118
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа так хорошо всё начиналось, Страуструпа обсуждали, конструкторы, placement new... И вдруг опять они со своей Жабой тут.
Начинай (точнее продолжай), я поддержу!
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053125
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не будет. Прошу прощения за свои посты не по теме.

Давно не видел Летчика Петрава. Соскучился.

Дальше - только в контексте С++.

P.S. А если кто и меня на том поймает. Руби Чапая..
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053127
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНичего не будет.
Слился. Стыдно. (Шутка:).
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053132
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, дуй сюда. Ждём уже неделю.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053151
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonpetrav, дуй сюда. Ждём уже неделю.
Я ничего не понимаю в трассировке лучей, кроме школьной программы про отражение и преломление лучей между средами с разными оптическими свойствами.

Постановка твоей задачи кажется странной. Искусственный тест, который ты очень долго искал. И нашёл. Во…

Почему не вычисление числа Пи методом Монте-Карло, например? Почему не на видеокарте? Что именно ты так долго искал, а я нашёл за 3-ри секунды? Может я ошибаюсь?
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053161
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из уважения к топик-стартеру. Давай не будем здесь.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053383
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Администрация Сообщества, прошу вас удалить примерно 20-25 последних сообщений не связанных с С++.
...
Рейтинг: 0 / 0
Некоторые вопросы о программировании на C++
    #39053620
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Модератор:
Мы решили сделать по-другому.
Твои супермегатопики не о чём и обо всём на свете закрываем, на каждый следующий вопрос создавай отдельный топик, где
тебе будет выдан после отдельного обсуждения отдельный ответ. Или не будет, ну так это уж как получится.
...
Рейтинг: 0 / 0
142 сообщений из 142, показаны все 6 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Некоторые вопросы о программировании на C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]