Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 15.05.2010
Сообщений: 32

Классы основы

12.06.2010, 01:55. Показов 1379. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
class a1 // это определение класса
{
-||-||-;
};

a1 b; // как я понимаю это объявление

скажите пожалуйста где здесь объявление, а где определение класса? ато совсем запутал препод,
говорит что при объявлении класса не создается объект, как я понимаю создается объект b;
и в каком месте выделяется память(как я понимаю в самом классе)?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2010, 01:55
Ответы с готовыми решениями:

Классы и основы наследования, с++
Последняя лабораторная работа семестра. Немаленькая...про классы мало что знаю. Сложно ли это сделать? Не могли бы помочь ? 1....

Непонятна тема (Классы содержащие другие классы, как данные члены )
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include <iostream> class Point { public: void...

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

10
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
12.06.2010, 02:05
C++
1
2
3
4
class a1 
{
-||-||-;
};
это твой класс, он память не выделяет, просто говорит из чего будет состоять объект этого класса

C++
1
2
3
4
void main
{
a1 b;
}
а вот тут уже выделяется память под объект b
0
#define книжный_червь Я
 Аватар для ][акер
185 / 96 / 21
Регистрация: 30.01.2010
Сообщений: 780
12.06.2010, 02:07
C++
1
2
3
4
5
6
class a1 // Это определение класса
{
-||-||-;
};
 
a1 b; // Это объявление
Цитата Сообщение от downloadpascal Посмотреть сообщение
и в каком месте выделяется память
При описании объекта.
Цитата Сообщение от downloadpascal Посмотреть сообщение
говорит что при объявлении класса не создается объект, как я понимаю создается объект b;
при описании класса ничего не выделяется (и не должно). Его определяют чтобы компилятор знал какие там данные и функции.
0
425 / 229 / 87
Регистрация: 25.03.2009
Сообщений: 744
12.06.2010, 15:59
downloadpascal,
class a; - объявление
class a
{
}; - определение

int main()
{
a obj; - создание объекта в стеке, вызов конструктор по умолчанию.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2010, 19:59
Во-первых, термины «объявление» и «определение» относятся к какому-либо имени, примененному в программе, а не к некоему «классу».
Т.е.
C++
1
2
3
4
class a1 
{
//…
};
это определение имени a1, сообщающее, что оно является именем класса (т.е. типа) и описывающее этот класс, а
C++
1
a1 b;
это определение имени b, сообщающее, что оно является именем объекта (т.е. переменной) класса (т.е. типа) a1 и присвоение ему значения класса a1 по умолчанию.
Во-вторых, выделение памяти зависит не от того, объявлен, либо определен некий идентификатор.
Память выделяется только при определении объектов (т.е. переменных), так как, согласно стандарту, объект – это и есть область памяти, имеющая тип, значение, и, возможно, имя.
При определении типов (в том числе классов) память не выделяется.
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
12.06.2010, 20:53
Цитата Сообщение от Mr.X Посмотреть сообщение
Память выделяется только при определении объектов (т.е. переменных), так как, согласно стандарту, объект – это и есть область памяти, имеющая тип, значение, и, возможно, имя.
При определении типов (в том числе классов) память не выделяется.
Память выделяется оператором new - где его нет, там ничего не выделяется.
Когда вы объявляете int i; - никакая память не выделяется, переменная в стеке(как Вам верно указали).

Добавлено через 46 секунд
А когда пишете int* i = new int; - вот тут память выделяется.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
12.06.2010, 23:52
Цитата Сообщение от Skoi Посмотреть сообщение
Память выделяется оператором new - где его нет, там ничего не выделяется.
Когда вы объявляете int i; - никакая память не выделяется, переменная в стеке(как Вам верно указали).

Добавлено через 46 секунд
А когда пишете int* i = new int; - вот тут память выделяется.
Стек это область памяти. А вы под этим что-то другое подразумеваете?
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
13.06.2010, 03:06
Цитата Сообщение от Mr.X Посмотреть сообщение
Стек это область памяти. А вы под этим что-то другое подразумеваете?
Нет. Ничего другого я под этим не подразумеваю ) Я просто говорю о том, что эта память не выделяется -
она ужа выделена ОС равно как и под ваш код. Вы же не говорите что printf("Hello world"); выделяет вам память под строчку "Hello world"... Вот тут тож самое.

Добавлено через 26 минут
Ну т.е. стек - это неотъемлемая часть программы, без которой программа
существовать не сможет... Ну сможет, но не долго - до первых инструкций
типа push или call. А дальше упадёт... ну или даже уронит окружение, если
оно кривое.

Поэтому стек объявляют заранее, если он нужен большой - а то потом навешаете
туды жирных классов и будете ловить stack overflow.

А так стек- только для хранения указателей на выделенную память и мелкие
типы типа int хранить.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
13.06.2010, 06:43
Цитата Сообщение от Skoi Посмотреть сообщение
Вы же не говорите что printf("Hello world"); выделяет вам память под строчку "Hello world"...
Ну вообще-то так и есть... Опять же в стеке резервируется 12 байт на строку и завершающий ноль и адрес первого байта этой зарезервированной памяти в качестве параметра в printf() передаётся...
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.06.2010, 11:34
Цитата Сообщение от Skoi Посмотреть сообщение
Когда вы объявляете int i; - никакая память не выделяется, переменная в стеке
Ну, чувствуется, что этот раздел учебника вы еще не открывали.
При выполнении программой строки
C++
1
int i;
создается объект i (т.е. выделяется память) либо в статической памяти, если это статическая переменная, (и хранится до завершения программы), либо в автоматической памяти (стеке) (и хранится до выхода из блока).

Вы удивитесь, но при выполнении программой, например, строки
C++
1
x * y + z;
в памяти создается временный объект с результатом вычисления выражения x * y, который уничтожается по достижении конца выражения.
0
16 / 16 / 2
Регистрация: 31.07.2009
Сообщений: 54
17.06.2010, 00:39
Ребят, что Вы меня путаете?

Вот "выделяю память через int i;" и упираюсь в заранее отведенный стек в доли секунды -

Т.е. ничего там не выделяется, по заполнению заранее определенного стека приложение падает.

Вот тут выделяю память как положено -

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

Яж не сам придумал, а Вы сразу в учебник тыкать.

Добавлено через 7 минут
Цитата Сообщение от easybudda Посмотреть сообщение
Ну вообще-то так и есть... Опять же в стеке резервируется 12 байт на строку и завершающий ноль и адрес первого байта этой зарезервированной памяти в качестве параметра в printf() передаётся...
А енто, имхо, может быть вообще платформозависимо.

Assembler
1
2
3
4
5
                          nop
                          jmp next
KData                  db 'Hello, world',0
next:                   push offset Kdata
                          call DisplayFuckingString
И где что тут выделяется?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2010, 00:39
Помогаю со студенческими работами здесь

Проблема в понимании ООП(абстрактные классы, классы интерфейсы)
Всем здравия. Читал в свое время разные книги(к примеру, Гради Буч по проектированию) вроде все было понятно. Но тут с толкнулся с...

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

Наследование, базовые классы и производные классы
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.)
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы возможностей(Mixin классы)
Не могу понять смысла использования mixin классов( это класс в котором есть только методы и нет членов-данных) Т.е. к примеру у нас...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru