Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2011, 16:12   #1
naty1992
 
Регистрация: 30.03.2011
Сообщений: 5
По умолчанию

Здравствуйте.. Очень заинтересовал вопрос, заданный мне на экзамене...


Допустим есть у нас класс

public class A{};

мы проводим инициализацию любого обьекта

A a;
Что на данном этапе будет хранится в а?? этому объекту ничего не присваивается и т.п.

Уточню на всякий случай еще раз... Язык С++

Последний раз редактировалось Stilet; 17.06.2011 в 16:16.
naty1992 вне форума Ответить с цитированием
Старый 17.06.2011, 16:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что на данном этапе будет хранится в а?? этому объекту ничего не присваивается и т.п.
Если не ошибаюсь, ничего. Просто он создастся (если ты опишешь в его конструкторе инициализацию полей то они получат значения.)
Кстати, где-то читал что объекты лучше создавать через new. Не знаю почему но автор статьи оч. сильно был против такого статического создания.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.06.2011, 16:19   #3
naty1992
 
Регистрация: 30.03.2011
Сообщений: 5
По умолчанию

Спасибо Виталий.. Может так и нельзя использовать, но это же экзамен и тут главное знать нюансы такие...

Надеюсь это мне поможет при сдаче да и для личного опыта в программировании))
naty1992 вне форума Ответить с цитированием
Старый 17.06.2011, 16:30   #4
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2naty1992
Цитата:
public class A{};
это не c++

Цитата:
Уточню на всякий случай еще раз... Язык С++
повторяю еще раз, код, что вы привели не является С++ кодом

вот создание пустого класса в c++
Код:
class A{};
Цитата:
мы проводим инициализацию любого обьекта
A a;
инициализации тут нет

Цитата:
Что на данном этапе будет хранится в а?? этому объекту ничего не присваивается и т.п.
скорей всего в вопросе подразумевается, что по умолчанию будет содержать объект такого класса:
конструктор по умолчанию
деструктор
конструктор копирования
оператор присваивания

2Stilet
Цитата:
Кстати, где-то читал что объекты лучше создавать через new. Не знаю почему но автор статьи оч. сильно был против такого статического создания.
бредом попахивает, извиняюсь всегда выгоднее создать объект на стеке. new нужно использовать, если у тебя operator new перегружен, к примеру, и в каких то случаях он не выделяет память
Код:
if (A *pA = new A) {
    // выделили, работаем
}
ну или если объект дочерний, а его жизнью управляет родитель. и тп
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 17.06.2011 в 16:52.
pproger вне форума Ответить с цитированием
Старый 17.06.2011, 19:18   #5
naty1992
 
Регистрация: 30.03.2011
Сообщений: 5
По умолчанию

Я не буду спорить, но в том и проблема, мне сказали, что А а - в ООП программировании это тоже инициализация, не смотря на то, что там нет присваивания...

А на счет того что это не С++, я по ошибке public написала, просто больше пользуюсь Java... А это только для учебы


То есть ответ на вопрос:
по умолчанию объект такого класса будет содержать :
конструктор по умолчанию
деструктор
конструктор копирования
оператор присваивания

Так???
naty1992 вне форума Ответить с цитированием
Старый 17.06.2011, 19:28   #6
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2naty1992
Цитата:
А а - в ООП программировании это тоже инициализация
обманули. это объявление и определение объекта. для инициализации нужен конструктор с одним параметром. вот инициализация:
Код:
A a(10);
string str = "123";
Цитата:
То есть ответ на вопрос:
по умолчанию объект такого класса будет содержать :
конструктор по умолчанию
деструктор
конструктор копирования
оператор присваивания
Так???
так
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 17.06.2011, 19:35   #7
como
Форумчанин
 
Регистрация: 26.07.2008
Сообщений: 116
По умолчанию

Сколько неправильной фигни было сказано...

Код:
class A {};
A a;
Создает объект типа A, который не инициализируется ничем. О значении этого объекта говорить не имеет смысла, так как класс A пуст.

Что произойдет в реальной программе? Этот объект может создаться, а может и нет, если компилятору указано оптимизировать код, и он решит выбросить безполезный код. В неоптимизированном коде для 'a' может быть выделено один байт (или одно машинное слово) на стеке, в который ничего не будет записано.

Вообще, размер пустого класса - 1 байт. Можно проверить:
Код:
assert(sizeof(A) == 1);
Объект 'a' не может содержать конструкторов, деструкторов, и т.п. Объект - это, грубо говоря, способ храниния данных в памяти. Конструкторы, деструкторы и т.п. имеют отношение к классу в целом. Они применяются к объектам этого класса. Но они не хранятся и не содержатся как данные нигде, потому что они представляют из себя код, а не данные.
como вне форума Ответить с цитированием
Старый 17.06.2011, 19:42   #8
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2como
я ответил так, как логичнее всего было ответить на этот вопрос, ибо ответ - не содержится ничего слишком явный. вот и предположил, что вопрос стоял в том, какие методы сгенерируются по умолчанию.
а про "объект будет содержать" - упростил для тс, ибо вопрос был про объект
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 17.06.2011, 19:42   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
обманули. это объявление и определение объекта. для инициализации нужен конструктор с одним параметром. вот инициализация:
Код:
A a(10);
string str = "123";
Пожалуй добавлю, что всё же инициализация может проводится и в конструкторе без параметров. Инициализация происходит всегда при создании объекта, в этом вся суть RAII. Другое дело как там всё по факту происходит, меняется выделенная память или нет
netrino вне форума Ответить с цитированием
Старый 17.06.2011, 19:47   #10
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2netrino
ну да, чет я зациклился на конструкторе с параметром
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
теоретическая программа с использование библиотеки mpi Kodeks Общие вопросы C/C++ 0 29.11.2010 07:45
Программа на тему:"Теоретическая мехника" Andreyko Паскаль, Turbo Pascal, PascalABC.NET 7 05.06.2010 10:59