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

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

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

class a1 // это определение класса
{
-||-||-;
};

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

скажите пожалуйста где здесь объявление, а где определение класса? ато совсем запутал препод,
говорит что при объявлении класса не создается объект, как я понимаю создается объект b;
и в каком месте выделяется память(как я понимаю в самом классе)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2010, 01:55
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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

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

А так стек- только для хранения указателей на выделенную память и мелкие
типы типа int хранить.
0
easybudda
Модератор
Эксперт CЭксперт С++
10089 / 6000 / 1503
Регистрация: 25.07.2009
Сообщений: 11,375
13.06.2010, 06:43 9
Цитата Сообщение от Skoi Посмотреть сообщение
Вы же не говорите что printf("Hello world"); выделяет вам память под строчку "Hello world"...
Ну вообще-то так и есть... Опять же в стеке резервируется 12 байт на строку и завершающий ноль и адрес первого байта этой зарезервированной памяти в качестве параметра в printf() передаётся...
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
13.06.2010, 11:34 10
Цитата Сообщение от Skoi Посмотреть сообщение
Когда вы объявляете int i; - никакая память не выделяется, переменная в стеке
Ну, чувствуется, что этот раздел учебника вы еще не открывали.
При выполнении программой строки
C++
1
int i;
создается объект i (т.е. выделяется память) либо в статической памяти, если это статическая переменная, (и хранится до завершения программы), либо в автоматической памяти (стеке) (и хранится до выхода из блока).

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

Вот "выделяю память через 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
17.06.2010, 00:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2010, 00:39

классы/дочерние классы/методы
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через...

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

Классы, включающие другие классы
Столкнулся вот с таким кодом: #include <iostream> class Point { public: ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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