powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Некоторые вопросы о программировании на C++
25 сообщений из 142, страница 3 из 6
Некоторые вопросы о программировании на 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
25 сообщений из 142, страница 3 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / Некоторые вопросы о программировании на C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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