Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17

Почему конструктор не работает?

13.11.2012, 21:53. Показов 3351. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужна помощь, коллеги, так как сам ничего не понял. Создал класс. Хотелось бы, чтобы при создании объекта явный конструктор класса специфицировал два параметра из string. При попытке специфицировать два параметра компилятор ошибки не выдает, но при запуске программа вылетает. Вот код, проблемное место выделил комментом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//Создать объект my класса Book и вывести 2 параметра объекта my.
#include <iostream>
 
using namespace std;
 
class Book
{
public:
  Book (string name, string name2 )
  {
    setName ( name );
    setName2 ( name2 ); // Вот эта строка. При комментировании этой строки запускается  
                                  // нормально. А вот при открытии... Ничего не могу понять :(
  }
 
string setName ( string name)
{
  elDat = name;
}
 
string setName2 (string name2)
{
  elDat2 = name2;
}
 
void dMess()
{
  cout << elDat<< endl << elDat2;
}
 
private:
  string elDat;
  string elDat2;
};
 
int main()
{
  Book my("too","too2");
  my.dMess();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.11.2012, 21:53
Ответы с готовыми решениями:

Почему не работает конструктор?
подскажите почему не инициализируется а4? Почему не происходит неявного вызова конструктора с одним аргументом, а после обычный конструктор...

Почему не работает конструктор?
- Смысл моего вопроса становится ясен из минимального примера приведенного ниже: ...

Почему не работает конструктор копирования?
Подскажите, пожалуйста, где ошибка в коде? Вылетает прога с ошибкой.. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

30
13.11.2012, 23:29
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от soon Посмотреть сообщение
Croessmah, я уже сказал, что требуется для понимания работы контейнера std::string. Работа с выделением памяти и указателями. Классы ну никак этому не способствуют. Все равно, что сказать - для понимания работы деревьев(в частности - std::set и иже с ним) надо изучить классы.
Вы меня не поняли. Я веду к тому, что сначала нужно научиться работать стандартными методами, а потом уже переходить к STL. Иначе что мы получаем? Работать с массивами символов не умеем, использовали basic_string всегда, выделить кусок памяти для массива тоже не особо много практики, ибо всегда юзали vector, сделать свой связанный список тоже не в состоянии, потому что нам сказали, что list - это круто! Выделив память не знаем как с ней обращаться, потому что все делали за нас.

0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,542
Записей в блоге: 1
13.11.2012, 23:30
а как объяснить, что у переменных этого типа можно вызывать методы, а у других нельзя? И прочие непохожести на встроенные типы Си? При изучении Сей у K&R чётко всё шло от элементарного к более сложному. При представлении каждого нового объекта в языке чётко расписывались все нюансы его применения.
0
13.11.2012, 23:31  [ТС]

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
программист должен разбираться в том, что использует вплоть до битовых операций, областей в памяти и прочего низкоуровневого
В принципе да. Хотя и скучно, конечно, но что поделаешь...

Цитата Сообщение от Croessmah Посмотреть сообщение
Но для этого мы учились в автошколе на права. Да и вообще знаем примерное устройство авто, иначе получается "обезьяна с гранатой"
Я не против углубленного обучения, почему бы и нет? Но чтобы понять принцип работы рулевой системы, совсем не обязательно углубляться в работу топливной системы, так? Достаточно на время принять, что при надавливании на эту педаль, которая отвечает за ускорение, нужно рулить, а рулевая система устроена следующим образом... и далее по тексту. Вот в этом и состоит преимущество подхода Дейтелов: разумное отсутствие педантичности, и в то же время отменное понимание нужд студентов. Благо, они имеют громадный (и реальный!) опыт преподавания, в отличие от некоторых писателей. А это означает, что они в жизни сталкивались с затруднениями новичков, и за годы наработали великолепный стиль утилизации этих затруднений. Это в самом деле чувствуется по книге. Ну просто небо и земля по сравнению с некоторыми другими книгами.

0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
13.11.2012, 23:35
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы меня не поняли. Я веду к тому, что сначала нужно научиться работать стандартными методами, а потом уже переходить к STL. Иначе что мы получаем? Работать с массивами символов не умеем, использовали basic_string всегда, выделить кусок памяти для массива тоже не особо много практики, ибо всегда юзали vector, сделать свой связанный список тоже не в состоянии, потому что нам сказали, что list - это круто! Выделив память не знаем как с ней обращаться, потому что все делали за нас.
Возможно. Я именно это и имел в виду. Меня просто смутила ваша фраза "То есть классы еще не изучили нормально, а используют string? ИМХО, бред!".
0
13.11.2012, 23:35

Не по теме:

Цитата Сообщение от Nweo Посмотреть сообщение
Благо, они имеют громадный (и реальный!) опыт преподавания
C++
1
2
3
4
string setName ( string name)
{
  elDat = name;
}
и, скорее всего именно из-за их очень большого опыта у Вас тут 2 вызова конструктора копирования, а если добавить return, то будет еще и третий, да и вернется не совсем то, чего ожидали.

0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
13.11.2012, 23:37  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И прочие непохожести на встроенные типы Си? При изучении Сей у K&R чётко всё шло от элементарного к более сложному.
Пошла какая-то мне непонятная "профессиональная матерщна". Пойду-ка я отсюда
А серьезно говоря, спасибо, коллеги, за подсказку по теме!
0
13.11.2012, 23:38

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а как объяснить, что у переменных этого типа можно вызывать методы, а у других нельзя?
Ну ведь их можно и не вызывать, а по началу использовать класс string как тип строки, например, в паскале. Практика, конечно, пагубная, но м.б. для изучения подойдёт. Потому как строки используются повсеместно в учебных задачах, а такая беда, что специализированного типа строки в С++ нет, новичка не должна беспокоить в принципе.

0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
13.11.2012, 23:41
Цитата Сообщение от Croessmah Посмотреть сообщение
и, скорее всего именно из-за их очень большого опыта у Вас тут 2 вызова конструктора копирования, а если добавить return, то будет еще и третий, да и вернется не совсем то, чего ожидали.
Я уверен, это либо не весь код, либо ТС неправильно списал. Функция должна возвращать std::string, чего не делается. В результате segfault. Чтобы сказать более точно, нужно копать стандарт и лезть в ассемблер. Но не думаю, что это будет кому-либо интересно, поскольку основная причина уже названа.
0
14.11.2012, 07:14  [ТС]

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


C++
1
2
3
4
string setName ( string name)
{
  elDat = name;
}
и, скорее всего именно из-за их очень большого опыта у Вас тут 2 вызова конструктора копирования, а если добавить return, то будет еще и третий, да и вернется не совсем то, чего ожидали.

Если бы не их опыт, даже до этого места в программировании не дошел бы.
Что стринг написал в начале - это да, моя ошибка.
К сожалению, не вижу в этом отрезке кода 2 вызова конструктора копирования. Только одна операция присваивания (копирования) значения elDat = name; А где второй вызов? И какой конструктор копирования Вы имеете в виду? Book? Или страндартный конструктор копирования C++?

0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
14.11.2012, 07:28
Ребят, книга Дейтлов все же неплохая. В первых главах они просто используют раннее введение в классы, демонстрируют как можно пользоваться тем же std::string. Потом уже все подробнее разжевывается - и встроенные типы и возможности STL.

Добавлено через 2 минуты
Цитата Сообщение от Nweo Посмотреть сообщение
А где второй вызов? И какой конструктор копирования Вы имеете в виду?
Смотри, в твою функцию аргумент передается по значению, то есть создается локальная копия - string name. Для этого и вызывается конструктор копирования. Потом в книге будет объяснена передача по ссылке и ее преимущества.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 1
14.11.2012, 15:48
Цитата Сообщение от Schizorb Посмотреть сообщение
Ребят, книга Дейтлов все же неплохая. В первых главах они просто используют раннее введение в классы, демонстрируют как можно пользоваться тем же std::string. Потом уже все подробнее разжевывается - и встроенные типы и возможности STL.
Мне больше нравится книга Девиса. Вся книга - только основы языка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2012, 15:48

Не работает конструктор копирования почему-то...
#include &quot;stdlib.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; #include &lt;cstddef&gt; using namespace std; class Top { public: ...

Неправильно работает конструктор копирования list, почему?
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;list&gt; #include &lt;iterator&gt; #include &lt;iostream&gt; using namespace std; list...

Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию)
#include&lt;iostream&gt; using namespace std; class Date { int a, b; static Date default_date; public: Date(int x = 0, int...

Почему не вызывается конструктор перемещения?
#include &lt;iostream&gt; #include &lt;vector&gt; class Object { public: Object() { std::cout &lt;&lt; &quot;Object()&quot; &lt;&lt; std::endl; ...

Почему не вызывается конструктор копии?
Почему не вызывается конструктор копии? class CPoint { friend std::istream &amp;operator&gt;&gt;(std::istream &amp;in, CPoint &amp;obj); ...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru