powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Если в классе не объявлены конструкторы, то...
25 сообщений из 51, страница 2 из 3
"Если в классе не объявлены конструкторы, то...
    #37855095
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Вы не утруждаете себя пояснять свои оскорбления? Т.е. чисто авторитарный подход. Ну ок, закроем тему.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855096
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 06/26/2012 03:32 PM, TopSpace wrote:

> Какая критика? Я отметил, что C# более объектно-ориентирован, чем С++ - Вы с
> этим не согласны?

Ты сначала возьми все языки. Определи метрику для объектно-ориентированости,
чтобы соотнести языки с множеством действительных чисел по этому критерию.
Вычисли для всех рассматриваемых языков эту метрику, и тогда уже заявляй,
что какой-то язык более объектно-ориентированый, чем другой, преподаватель блин,
тоже мне.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855116
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

не надо мудрствовать лукаво, все проще.

WIKIPEDIAОбъе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

В C# кроме классов, по сути, других строительных единиц кода нет.
В С++ функции и данные могут существовать вне классов, как в языке С.

Из этого не следует, что C# более объектно-ориентирован? Если для вас нет - вперед, проводите свои исследования.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855160
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceMasterZiv,

не надо мудрствовать лукаво, все проще."Световодозвуконепроницаемость! Вот что я говорю!"

Вы используете термин "более объектно-ориентирован", не раскрывая его значения.

WikiОбъе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.Ergo, C++ суть язык, совместимый с объектно-ориентированной парадигмой программирования. Больше из этого определения ничего не следует.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855172
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 06/26/2012 03:51 PM, TopSpace wrote:
> WIKIPEDIA
> Объе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) —
> парадигма программирования, в которой основными концепциями являются понятия
> объектов и классов.

Класс -- основная концепция языка С++. Ну и что дальше ?

(кстати они в определении слили в одну чашку объектные и объектно-ориентированные языки,
так что ты можешь ещё помедитировать на счёт того, что более объектное -- CLIPPER или Smalltalk).

> В C# кроме классов, по сути, других строительных единиц кода нет.
> В С++ функции и данные могут существовать вне классов, как в языке С.

В C# и яве есть примитивы. Они только пакуются-распаковываются по требованию
автоматически, но по сути объектами не являются.

> Из этого не следует, что C# более объектно-ориентирован?

Неа. (даже если бы это было так). Из этого вообще ничего не следует.

Если для вас нет -
> вперед, проводите свои исследования.

А я ничего не заявлял. что мне доказывать?
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855202
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivКласс -- основная концепция языка С++. Ну и что дальше ?


Основная, но не единственная, С++ поддерживает парадигму процедурного программирования, C# - нет. Я не думал, что нужно пояснять что значит ОО. Если простым языком, то это решение задач в понятиях объектов, а не процедур. C# просто не позволит решить задачу минуя объекты, С++ - запросто.

Вот еще линк: Чисто объектно-ориентированные и гибридные языки

Среди наших четырех языков, только Java и C# являются чистыми ОО языками (как Eiffel и Smalltalk)....
...C++ и Object Pascal, наоборот, - типичные примеры гибридных языков, которые позволяют программистам использовать при необходимости традиционный подход C или Pascal.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855252
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceC# просто не позволит решить задачу минуя объекты, С++ - запросто.
Гм.
Код: c#
1.
2.
3.
public static class Functions {
  //Дохрена функций
}

Кто найдёт хоть один объект?
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855271
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceПосмотрел кстати здесь: конструктор по умолчанию .

В C++ и Java если нет явным образом опредёленных конструкторов в классе, то компилятор использует конструктор по умолчанию, опредёленный неявным способом, который аналогичен «чистому» конструктору по умолчанию.

Казалось бы мелочь, но смысл уже немного другой. Компилятор создает "чистый" конструктор по умолчанию - вот это точное определение.
На самом деле правило чуть сложнее.
1) Если в классе нет явных конструкторов по умолчанию и имеются только члены POD типов или структуры содержащие только POD и без явных конструкторов то компилятор создает неявный конструктор который инициализирует всю структуру нулями.
Но вызывать этот конструктор он будет только если создаваемый объект имеет явный инициализатор.

Таким образом
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Foo
{
	int x;
};

int main()
{
	Foo f;  // в f.x лежит мусор потому что конструктор не вызван
	Foo g = Foo(); // конструктор вызван и поэтому g.f == 0 
	return 0;
}



2) Если же у класса есть явный конструктор, то именно на него возлагается обязанность указать инициализаторы для POD членов класса . Этот конструктор вызывается даже если у объекта нет инициализатора, но если в нем не указаны инициализаторы для POD членов то они останутся неинициализированными.
Т.е:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Foo
{
	int x;
	Foo() {} // нет инициализатора для x
};

int main()
{
	Foo f;  // конструктор вызван, но f.x лежит мусор т.к. в к-ре нет инициализатора x
	Foo g = Foo(); // то же самое
	return 0;
}



3) Если у класса нет конструктора и смесь членов POD и не-POD (т.е классов с конструкторами), то неявный конструктор создается, вызывается в любом случае, но вызывает конструкторы по умолчанию только у не-POD членов.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Foo
{
	int x;
	std::string s;
};

int main()
{
	Foo f;  // конструктор вызван, но f.x лежит мусор т.к. в неявном к-ре нет инициализатора x (а только s)
	Foo g = Foo(); // то же самое
	return 0;
}



Т.е. не-POD данные всегда иницализируются каким либо конструктором, а для иницализации POD-данных всегда требуется указывать явные инициализаторы, кроме единственного исключения - структура состоящая исключительно из POD данных, без конструктора, создаваемый объект которой имеет иницализатор.
Во всех остальных случаях у вас будут неиницализированные POD данные (сейчас не рассматриваем статическую память, где все сначала нулями иницализируется, а потом уже применяются выше приведенные правила)
По моему достаточно просто запомнить.

К поддержке ООП это вообще не имеет отношения.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855729
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, спасибо всем за участие, вы реально открыли для меня новое в таком, казалось бы простом вопросе. Извините, если кого-то задел.

Anatoly Moskovsky,
спасибо за примеры! Не знаю почему, но в первом из них у меня в g.x все-таки "мусор"... Может зависит от компилятора, или Debug\Release? Смотрел в MS VS 2010 Ultimate (Console, Debug).
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855740
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceAnatoly Moskovsky,
спасибо за примеры! Не знаю почему, но в первом из них у меня в g.x все-таки "мусор"... Может зависит от компилятора, или Debug\Release? Смотрел в MS VS 2010 Ultimate (Console, Debug).
Если вы создаете структуру так Foo f; (без инициализатора) то там и должен быть мусор. Я ж написал в коментариях.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855788
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

не, я как раз про пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Foo
{
	int x;
};

int main()
{
	Foo f;        // в f.x лежит мусор
	Foo g = Foo(); // и в g.f тоже!
	return 0;
}



У меня в обоих объектах x остается с мусором.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855800
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceAnatoly Moskovsky,

не, я как раз про пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Foo
{
	int x;
};

int main()
{
	Foo f;        // в f.x лежит мусор
	Foo g = Foo(); // и в g.f тоже!
	return 0;
}



У меня в обоих объектах x остается с мусором.
Как проверяли?
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855823
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 06/26/2012 08:22 PM, TopSpace wrote:

> не, я как раз про пример
>
> class Foo
> {
> int x;
> };
>
> int main()
> {
> Foo f;// в f.x лежит мусор
> Foo g = Foo();// и в g.f тоже!
> return 0;
> }
>
>
>
> У меня в обоих объектах x остается с мусором.


и должен быть мусор. Foo -- это POD. У него нет конструктора,
и члены никак не инициализируются.

В С++ есть генеральный принцип постоения языка -- no overhead.
Если тебе не нужна какая-то функциональность в языке, и ты её не используешь, то
ты гарантировано получишь 0 накладных расходов.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855838
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

ну как, breakpoint и watch
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855847
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivи должен быть мусор. Foo -- это POD. У него нет конструктора,
и члены никак не инициализируются.

Вы ошибаетесь.
Foo() создает инициалированную нулями структуру.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855852
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceAnatoly Moskovsky,

ну как, breakpoint и watch
Распечатайте в коде.
Дебаггер может все что угодно показывать.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855911
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpace...компилятор сам создаст конструктор по умолчанию"
Ты не видишь разницы между конструктором и инициализатором.
Отсюда и все твои проблемы.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37855928
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyРаспечатайте в коде.
Дебаггер может все что угодно показывать.

Плиин... и правда.. кто бы мог подумать. Заносит ноль. Все, снимаю все свои возражения, каноническая фраза действительно соответствует правде, просто она требует разъяснения нюансов.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37856575
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 06/26/2012 04:19 PM, TopSpace wrote:

> Основная, но не единственная, С++ поддерживает парадигму процедурного
> программирования, C# - нет.

C# тоже поддерживает парадигму процедурного программирования.


> Среди наших четырех языков, только Java и C# являются чистыми ОО языками (как
> Eiffel и Smalltalk)....
> ...C++ и Object Pascal, наоборот, - типичные примеры гибридных языков,

Смотри.
Я занимаюсь программированием. Значит я -- программист, так ?
Я также например играю на гитаре. Значит я -- гитарист. Так ?
Ещё я катаюсь на сноуборде, значит я - сноубордист, и так далее.

Также и тут -- Если в языке есть свойства поддержки ООП -- значит
это объектно-ориентированный язык. Если в языке есть поддержка процедургого
программирования -- это процедурный язык. Если есть поддержка функционального
программирования -- это функциональный язык.
и так далее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37856750
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

да я не спорю, что оба они (C++ и C#) - мультипарадигменные языки. То, что C# более объектно ориентирован, мне показалось в ходе такой истории.
Студенты изучают сначала чистый С, где в т.ч. знакомятся с алгоритмами, это как основа. Потом идет курс ООП, и тут дилемма. Многие хотят учить C#, как более "модный", современный, и удобный для быстрой разработки. Понять их можно, им же и диплом потом писать, и эквивалентный результат в области окошек, чтения файлов, коннекта к базе и т.п. - на .net сделать быстрее, проще (хоть и в ущерб пониманию "как это работает"). Прикол в том, что даже чтобы написать Hello, world! приходится сразу же столкнуться с:
1. понятие класс
2. понятие метода
3. понятие статического метода (для Main).

А С++ плавно вытекает и С, тот же main, в начале (как во многих книгах) отличия С++ от С (new, перегрузка функций, ссылки, и т.п.), и только потом классы - получается очень плавно. У них еще действуют привычки от С, типа int вместо bool, глобальные функции. А c# более строго приучает к ОО-стилю. Он просто не даст написать программу без использования хотя бы одного класса.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37857224
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> да я не спорю, что оба они (C++ и C#) - мультипарадигменные языки. То, что C#
> более объектно ориентирован, мне показалось в ходе такой истории.

Нет "более" или "менее".

Прикол в том, что даже чтобы написать Hello,
> world! приходится сразу же столкнуться с:
> 1. понятие класс
> 2. понятие метода
> 3. понятие статического метода (для Main).

Да ?

printf("Hellow, word!\n");



> А С++ плавно вытекает и С, тот же main, в начале (как во многих книгах) отличия
> С++ от С (new, перегрузка функций, ссылки, и т.п.), и только потом классы -
> получается очень плавно. У них еще действуют привычки от С, типа int вместо
> bool, глобальные функции. А c# более строго приучает к ОО-стилю. Он просто не
> даст написать программу без использования хотя бы одного класса.

А оно надо ?


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37857504
Abstraction
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПрикол в том, что даже чтобы написать Hello,
> world! приходится сразу же столкнуться с:
> 1. понятие класс
> 2. понятие метода
> 3. понятие статического метода (для Main).

Да ?

printf("Hellow, word!\n");
Имелось в виду, в случае C#, по всей видимости. Там же любая (не являющаяся делегатом) функция, включая точку входа, должна быть в каком-нибудь классе.
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37857530
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда System.out.println("Hellow, World!");
...
Рейтинг: 0 / 0
"Если в классе не объявлены конструкторы, то...
    #37857690
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНу тогда System.out.println("Hellow, World!");

System.Console.WriteLine("Hellow, World!"); ? Так а ГДЕ это написать? В С++ можно в int main. В C# придется объявить класс, а в нем - public static void Main.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
"Если в классе не объявлены конструкторы, то...
    #38902888
Bleach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlTopSpace...компилятор сам создаст конструктор по умолчанию"
Ты не видишь разницы между конструктором и инициализатором.
Отсюда и все твои проблемы.

А можна немного поподробнее? ну или ссыль где курить
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 2 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / "Если в классе не объявлены конструкторы, то...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]