Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
downloadpascal
0 / 0 / 0
Регистрация: 15.05.2010
Сообщений: 32
#1

Классы основы - C++

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

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

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

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

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

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

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

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

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

Классы, включающие другие классы - C++
Столкнулся вот с таким кодом: #include <iostream> class Point { public: void SetX(int x) {itsX = x;} void SetY(int y) ...

10
Mur3ik
102 / 102 / 4
Регистрация: 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 / 6
Регистрация: 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
Андрейка
420 / 224 / 27
Регистрация: 25.03.2009
Сообщений: 744
12.06.2010, 15:59 #4
downloadpascal,
class a; - объявление
class a
{
}; - определение

int main()
{
a obj; - создание объекта в стеке, вызов конструктор по умолчанию.
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 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 / 1
Регистрация: 31.07.2009
Сообщений: 54
12.06.2010, 20:53 #6
Цитата Сообщение от Mr.X Посмотреть сообщение
Память выделяется только при определении объектов (т.е. переменных), так как, согласно стандарту, объект – это и есть область памяти, имеющая тип, значение, и, возможно, имя.
При определении типов (в том числе классов) память не выделяется.
Память выделяется оператором new - где его нет, там ничего не выделяется.
Когда вы объявляете int i; - никакая память не выделяется, переменная в стеке(как Вам верно указали).

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

Добавлено через 46 секунд
А когда пишете int* i = new int; - вот тут память выделяется.
Стек это область памяти. А вы под этим что-то другое подразумеваете?
0
Skoi
16 / 16 / 1
Регистрация: 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Эксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
13.06.2010, 06:43 #9
Цитата Сообщение от Skoi Посмотреть сообщение
Вы же не говорите что printf("Hello world"); выделяет вам память под строчку "Hello world"...
Ну вообще-то так и есть... Опять же в стеке резервируется 12 байт на строку и завершающий ноль и адрес первого байта этой зарезервированной памяти в качестве параметра в printf() передаётся...
0
Mr.X
Эксперт С++
3051 / 1696 / 265
Регистрация: 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 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

классы/дочерние классы/методы - C++
помогите пожалуйста! надо что выводились только учебеники. чтоб былo через GetTip. h файл class Book { protected: char...

Основы ООП - C++
Здраствуйте! Уже второй день пытаюсь разобраться и хорошего ответа так и не нашел. На форуме подобные вопросы видел, и википидею читал, но...

C++ основы и литература - C++
Какую книгу лучше выбрать для изучения основ c++ я взял C++ за 21 день и c 9 дня начал путаться и не понимать тем более в классах не очень...


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

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

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