powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько вопросов по с++
25 сообщений из 42, страница 1 из 2
Несколько вопросов по с++
    #39055155
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не дописывать в каждую профильную тему создал эту тему -- незаурядные вопросы на которые не так просто найти ответ.
1. Что такое root namespace -- это самый базовый неймспейс?
2. Если есть клас (обьект) с полями int x; int y -- какие их адреса, если буквально -- адрес поля х больше/меньше/равен адресу поля у?
3. Если перефразировать полиморфизм-- то это способ использовать тот же самой метод для разных задач (типов), или такое обозначение (насколько помню с памяти) ближе к оверлодингу?
4. Вирт. деструктор это деструктор что касается базоваго класа ?
5. Может ли шаблонный клас наследовать параметр?
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39055181
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. Класс та же структура, а в структурах данные хранятся в том порядке в котором объявлены. Т.е. адрес x меньше. Но есть нюансы с конкретными значениями адресов.

По остальному не подскажу.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39055315
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Что такое root namespace -- это самый базовый неймспейс?

Ну, ::, глобальный неймспейс или то же, что полное отсутствие неймспейса.

2. Если есть клас (обьект) с полями int x; int y -- какие их адреса, если буквально -- адрес поля х больше/меньше/равен адресу поля у?

Адреса членов класса неопределены. Может быть любое сочетание, x < y или y<x

В POD-структурах -- в порядке обявления в классе.

Но если честно я не знаю, как там строго по стандарту.

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

Перегрузка -- один из видов полиморфизма. Вообще, полиморфизм -- очень сложная штука, и её лучше вообще не пытаться как-то определить. В С++ под полиморфизмом чаще всего понимают тупо возможность написать виртуальную фукнцию в иерархии классов
и потом вызывать её -- а она будет работать по-разному.

4. Вирт. деструктор это деструктор что касается базоваго класа ?

Что значит, касается ? Виртуальный деструктор --- это деструктор, объявленный виртуальным, и всё.

5. Может ли шаблонный клас наследовать параметр?

да
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39056637
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

1. Касательно неймспейса у меня был пример с двумя или тремя неймспейсами один из которых был вложен -- и на этом примере как то было сложно определяит вид иерархии.


2. В предыдущем посте написано что адрес поля (обьявленого раньше) х меньше y, а вы пишите что это неопределено. Как тогда вообше расматривать обьект -- вот есть указатель на обьект --адрес начала этого обьекта--а какая его структура -- как он распледелен в памяти--последовательно--вобще какой его размер, наверное зависит от полей и функции?


4. Кажется что виртуальный денструктор может быть только применим к базовому класу--вот и варианты ответа были что это конструктор лиш базового класа, или деструктор с обозначением виртуал--но если он работает лиш с базовими класами--но например определение вирт. деструктора производного класа приведет к ошибке?


5. Касательно шаблонных класов -- то имелось введу возможно ли наследовать собственный параметр -- если вы пишите что "Да" -- то где это прямо обозначено-- или какие есть ограничение на наследование в шаблонных класах ибо вопрос явно этого касается?
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39057116
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut 2. В предыдущем посте написано что адрес поля (обьявленого раньше) х меньше y, а вы пишите что это неопределено. Как тогда вообше расматривать обьект -- вот есть указатель на обьект --адрес начала этого обьекта--а какая его структура -- как он распледелен в памяти--последовательно--вобще какой его размер, наверное зависит от полей и функции?



Ну, зависят...
Я не очень понимаю, зачем вообще такое может понадобиться -- понимать, какой подъобъект раньше в памяти, какой позже.
Нужен адрес мембера -- взял его адрес, и используешь. Нужен другого -- взял и его адрес.
А иметь доступ к мемберам как к массиву -- это надо POS struct делать, и его union-ом мапить на массив.

stut 4. Кажется, что виртуальный денструктор может быть только применим к базовому класу--вот и варианты ответа были что это конструктор лишь базового класа, или деструктор с обозначением виртуал--но если он работает лиш с базовими класами--но например определение вирт. деструктора производного класа приведет к ошибке?



Не приведёт к ошибке. Но если в иерархии объявлен виртуальный деструктор (у предка), то он будет виртуальным у всех потомков,
без разницы, объявлен он virtual в потомке или нет.

stut5. Касательно шаблонных класов -- то имелось введу возможно ли наследовать собственный параметр -- если вы пишите что "Да" -- то где это прямо обозначено-- или какие есть ограничение на наследование в шаблонных класах ибо вопрос явно этого касается?


Где явно обозначено что ? Что можно наследовать от класса-параметра шаблона? Может быть, и нигде. А где написано, что если вокруг воздух, то ты им можешь дышать ? Вроде тоже нигде, но все, блин, дышат...

На параметры шаблонов вообще мало ограничений накладывается, с ними можно делать всё, что хочешь. Почти всё.
Короче, на наследование в шаблонных класах ограничений нет, лишь бы в итоге инстанциированное могло работать в С++.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39058949
Фотография Irmaro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребят, может не по теме, подскажите хорошую лит-ру, доступную в наших книжных.
для чайников, так сказать.
в универе изучала плюсы, но хочу наверстать забытое.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39059376
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошая тема - составить подборку литературы и добавить ее в FAQ.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39059380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmaroв универе изучала плюсы, но хочу наверстать забытое.

0) создавай для нового вопроса новый топик.
1) вопрос уже неоднократно обсуждался, поищи.
3) Про доступность в наших книжных не скажу. Не отслеживаю.
Для чайников -- скажу. Надо читать литературу НЕ для чайников, потому что читать
плохую литературу бесмысленно -- зря потратишь время.

Из литературы по С++ я рекомендую всегда книгу Дейтел + Дейтел, чем позже издание -- тем лучше (их было штук 5).
В озоне есть, значит, должна быть доступна (там чёрная, у них все обложки разные :-) ).

"Язык программирования C++. Лекции и упражнения" Стивен Прата -- я уверен, что тоже хорошая книга,
но сам её не читал ещё (или уже).

Есть ещё учебник Павловской, я её тоже не читал, но она хорошая -- Павловская, не книжка.
Я у неё учился. :-) Достоинства этой книги -- что это ВУЗ-овский учебник, малый объём, и меньше цена.
Но, наверное, покрытие материала там поменьше.

Но Дейтелы тоже ВУЗ-овский учебник, только не российский. Авторы -- отец и сын, отец -- практикующий профессор в университете,
а сын -- практикующий программист. Вместе получилась хорошая комманда для книги.

Но Дейтелы также (думаю) не охватывают весь язык, особенно последний стандарт. Последний стандарт неплохо освящён в книге
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ Энтони Уильямс (если я не перепутал книгу).
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39059381
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХорошая тема - составить подборку литературы и добавить ее в FAQ.

Ну да, давно пора.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060685
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы правы что адреса полей класов или обьектов можно лиш на практике. Но думаю это где то и в литературе написано -- не "вытянут" же он из пальца. Может как раз адреса полей в структур и класов разняться. Но в этом контексте у меня появился вопрос один из главных для меня в ООП--в чом суть юниона, как это возможно и почему его компоненты ссылаются на одно место памяти. Кстати как раз бы прямо касается предыдущего вопроса. Кроме того определение юниона можно трактовать двояко: или все его поля и функции (хотя последнее прерогатива класа) ссылаются на один адрес что невозможно ибо поля могут иметь разные типы и соответственно ячейки маняти, о функциях молчу ибо их адресации не знаю точно ведь там есть тело фунции а не только тип ретурна, я уже не говорю как вообще клас маркируется в этой ленте ячеек. Если все юнионы ссылаются на одно место значит это как статический клас. И вообще ссылатся на одно место памяти это какой то абсурд? Кроме того если два обьекта ссылаются на один и тот же обьект то при использование лиш одного деструктора, а потом второго это приведет к утечке памяти?
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060693
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос: char c="\xBC" -- это отрицательное шестнадцятиричное число как расшифровывается? Что там слеш значит? И вообще не понятно как там в отрицательных бинарных числах -- там ведь есть лишний бит на минус и не всегда возможно отличить ту же запись которая может означать и минусовое и положительное число. Касательно книг то книга дейтела очень обьемная но для меня который основную литературу уже прошел и имеет лиш базисную практику по плюсам там ничего нового не нашел (после шилда и других-- вот липман со своими основами надо немало вчитыватся). Там очень детально как раз для пионера програмирование написано и все обьясняется. Кстати кто то рекомендовал дейтела и для явы -- но там примеры все на свинге или awt не знаю подойдет ли это для изучение уже явы -- хотя может это издание такое графическое. Не мало встречал и книгу александреску -- вот интересно что то нового можно почерпнуть там после 3ех вышеупомянутых авторов.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060695
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut, все просто. union просто экономит память при граммотном использовании.

Например у тебя один объект для передачи и приема. При передаче используется свойство SendBytes (сколько байт передано) при приеме LoadBytes (сколько байт принято).
Объект может или передавать или принимать, т.е. в конкретном экземпляре используется или SendBytes или LoadBytes, но никогда одновременно и то и другое.
А теперь добавим что объектов миллион. Понял зачем нужен union?
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060712
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut,

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


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

суть же простая, ты интерпретируешь по-разному один и тот же блок памяти по определенному адресу.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060742
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот о юнионах надо прочитать: А здесь простой пример --
Код: 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.
#include <iostream>
using namespace std;

struct Rectangle {
    public:
    int width, height;
    void set_values (int,int);
    int area() {return width*height;}
};

void Rectangle::set_values (int x, int y) {
  width = x;
  height = y;
}

int main () {
  Rectangle rect;
  rect.set_values (3,4);
  cout << "area: " << rect.area();
  cout << "w:" << &rect.width <<endl;
  cout << "h:" << &rect.height <<endl;
  cout << "d:" << (int)(&rect.height - &rect.width) <<endl;
  return 0;
}


w: 0x22ff38;
h: 0x22ff3c;
d: 1 -- очень логично -- что поля размещены последовательно --
и разница адресов между ними 4. Но в програме даже после приведение к челому почему то 1 -- но почему эта разница не 4, а 1 -- то есть размер одной ячейки типа инт?
И если мы уже заговорили о юнионах, адресах обьектов -- как тогда и где сохраняются ключевые слова типа private, вообще как записывается обьект в память.
Вот адрес функции не было возможно получить:
Код: plaintext
1.
 cout << "s:" << &rect.set_values <<endl;


ISO C++ forbids taking the address of a bound member function to form a pointer to member function -- такая редкосная ошибка, без примеров в нете
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060796
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХорошая тема - составить подборку литературы и добавить ее в FAQ.

поддерживаю
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060797
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutВот о юнионах надо прочитать: А здесь простой пример --
Код: 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.
#include <iostream>
using namespace std;

struct Rectangle {
    public:
    int width, height;
    void set_values (int,int);
    int area() {return width*height;}
};

void Rectangle::set_values (int x, int y) {
  width = x;
  height = y;
}

int main () {
  Rectangle rect;
  rect.set_values (3,4);
  cout << "area: " << rect.area();
  cout << "w:" << &rect.width <<endl;
  cout << "h:" << &rect.height <<endl;
  cout << "d:" << (int)(&rect.height - &rect.width) <<endl;
  return 0;
}


w: 0x22ff38;
h: 0x22ff3c;
d: 1 -- очень логично -- что поля размещены последовательно --
и разница адресов между ними 4. Но в програме даже после приведение к челому почему то 1 -- но почему эта разница не 4, а 1 -- то есть размер одной ячейки типа инт?
И если мы уже заговорили о юнионах, адресах обьектов -- как тогда и где сохраняются ключевые слова типа private, вообще как записывается обьект в память.
Вот адрес функции не было возможно получить:
Код: plaintext
1.
 cout << "s:" << &rect.set_values <<endl;


ISO C++ forbids taking the address of a bound member function to form a pointer to member function -- такая редкосная ошибка, без примеров в нете

1. Метку public в классе Rectangle можно/(на мой взгляд лучше) не ставить. BS так не делает, и в другом коде(др. программистов) не встречал(понятно по каким причинам не ставят)
2. Название функции инициализации неудачное, лучше init (см BS).
3. Метки доступа, типа private не сохраняются нигде(память под них не выделяется)
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060807
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutно почему эта разница не 4, а 1 -- то есть размер одной ячейки типа инт?
Потому что int* указатель на тип int, т.е.
Код: plaintext
1.
2.
3.
4.
int y[10];
int* x = y;
x += 1; // переход к следующему элементу
int z = x - y; // индекс элемента y[] на который указывает х


Поизучай указатели.

stutкак тогда и где сохраняются ключевые слова типа private, вообще как записывается обьект в память.
Никак и нигде не сохраняется. private надо компилятору только на момент компиляции, чтобы при наличии в коде обращений извне выдать ошибку.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060808
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury1. Метку public в классе Rectangle можно/(на мой взгляд лучше) не ставить. BS так не делает, и в другом коде(др. программистов) не встречал(понятно по каким причинам не ставят)
Можно не ставить, в структурах public по умолчанию
https://msdn.microsoft.com/ru-ru/library/4a1hcx0y.aspx ...in structs the default accessibility is public, whereas in classes the default is private.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060904
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторно почему эта разница не 4, а 1 -- то есть размер одной ячейки типа инт?

Где такое написано ?
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060908
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryГде такое написано ?
Что тут неправильного?
Код: plaintext
1.
1 * sizeof(int) ==  4
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060911
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я может быть не до конца понял контекст, но мне показалось, что stut говорит о том, что размер памяти необходимый для того чтобы хранить переменную типа int обычно равен 1 байту.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060990
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Дело в том что сперва я создал такой самый клас, потом изменил одно слово class на struct -- результат аналогичен. Я сделал поле публичным потому что ошибка компилятора при приватном -- потому получить адрес не мог.
2. Размер инта кажется именно 4 байта -- то есть 1 инт = 4 байта. В любом случае ведь при отнимание отного и вотрого адреса разница должна быть 4, а не 1.
3. Приват не указывается -- ну значит это где то в компиляторе сохраняется на момент обработки кода. Вот как адрес функции получить интересно ибо вываливает ошибку.
4. Еще такой вопрос -- вот есть простая с++ програмка:
int y=4;

void main () {
int y=y;
return 0;
}

что то вроде того -- вопрос какое значение на выходе из метода мейн будет имень переменная y -- глобальная или локальная точно не помню.
Я когда поставил после (или перед) return 0 -- cout<<y; -- после компиляции и запуска получил
пустоту -- не думаю что это значит, что y=0;
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39060993
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что int* указатель на тип int -- я про указатели не писал.
Я непосредственно отнимал числа -- в дпном случае -- 12-8
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39061032
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutПотому что int* указатель на тип int -- я про указатели не писал.
Я непосредственно отнимал числа -- в дпном случае -- 12-8это ты так думаешь, а компилятор думает по другому. Он то указатели вычитал :))
Код: plaintext
1.
cout << "d:" << ( int )( &rect.height ) - ( int )( &rect.width ) << endl;

так попробуй.
...
Рейтинг: 0 / 0
Несколько вопросов по с++
    #39061034
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutЯ непосредственно отнимал числа -- в дпном случае -- 12-8
неправда - указатели вычитал -

Код: plaintext
1.
&rect.height - &rect.width



а к int - приводил результат вычитания, который есть ptrdiff_t
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько вопросов по с++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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