Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

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

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

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

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

Основы массивов - C++
Изучаю массивы, в книге Объектно-ориентированное программирование в C++ Р. Лафоре. #include <iostream> using namespace std; ...

Основы ветвления - C++
Встретился на сайте с такой подачей ветвления: if ( !qwe ) Что значит восклицательный знак, неравенство?

Основы программирования язык С - C++
Здравствуйте, у меня такая проблема, необходимо писать программы в turbo c запускаю через code:blocks и пишу код, но при попытке...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
][акер
#define книжный_червь Я
182 / 93 / 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;
при описании класса ничего не выделяется (и не должно). Его определяют чтобы компилятор знал какие там данные и функции.
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
12.06.2010, 15:59     Классы основы #4
downloadpascal,
class a; - объявление
class a
{
}; - определение

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

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

Добавлено через 46 секунд
А когда пишете int* i = new int; - вот тут память выделяется.
Стек это область памяти. А вы под этим что-то другое подразумеваете?
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 хранить.
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
13.06.2010, 06:43     Классы основы #9
Цитата Сообщение от Skoi Посмотреть сообщение
Вы же не говорите что printf("Hello world"); выделяет вам память под строчку "Hello world"...
Ну вообще-то так и есть... Опять же в стеке резервируется 12 байт на строку и завершающий ноль и адрес первого байта этой зарезервированной памяти в качестве параметра в printf() передаётся...
Mr.X
Эксперт С++
3042 / 1687 / 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, который уничтожается по достижении конца выражения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2010, 00:39     Классы основы
Еще ссылки по теме:

Знаю ли я основы ООП? - C++
ООП я изучал но не применял, ну если не считать собственный класс string и примитивную обертку WinAPI. Так что прошу дайте мне задачи по...

Что такое основы c++? - C++
Точнее, я более-менее понимаю что это, но все же... Хотелось бы узнать очень подробно что туда входит. Что бы я мог твердо сказать: "Я...

Основы создания классов - C++
обычно делал лабы на ура, но эта тема не под силу может кто и поможет... Основы создания классов Задание - структура пара: ...

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


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

Или воспользуйтесь поиском по форуму:
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
И где что тут выделяется?
Yandex
Объявления
17.06.2010, 00:39     Классы основы
Ответ Создать тему
Опции темы

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