С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/80: Рейтинг темы: голосов - 80, средняя оценка - 4.85
 Аватар для Sergey_O
5 / 5 / 3
Регистрация: 09.12.2009
Сообщений: 65

2 Конструктора в Классе

13.03.2010, 12:26. Показов 16785. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой класс:
C++
1
2
3
4
5
6
7
8
9
class zdanie
{
    int plosh, obm, e;
    char *adres, *vladelec;
public:
    zdanie(int pl, int ob, char adr[30], char vlad[30]);
    zdanie(int el){e=el;};
 
};
Присутствует 2 конструктора. Вопрос в том, как мне использовать вторым, если в main() я сначала обращаюсь к первому:
C++
1
zdanie test(1337,12,"Tver","Velo");
Как мне воспользоваться вторым?

Литературу штудирую, но пока что не нашёл ответа на свой вопрос.

Заранее благодарю за ответ.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2010, 12:26
Ответы с готовыми решениями:

Использование конструктора в классе
class Token { public: string kind; Token(string word) : kind(word) { } }; По какой причине я не могу использовать в этом...

Реализовать в классе 3 конструктора
Реализовать 3 конструктора с разными вариантами инициализации и 1 деструктор Я не могу понять как это сделать. Помогите на примере. ...

Ошибка конструктора в классе наследника
Помогите пожалуйста, выдаёт следующую ошибку в классе наследнике #include "stdafx.h" #include <iostream> using...

13
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 12:39
Sergey_O, никак, точнее, не зачем.
Создай методы установки/получения значения e.
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
13.03.2010, 12:42
C++
1
2
3
4
5
6
7
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    test = new zdanie(5);
    //еще какой-то код
}
1
 Аватар для Aye Aye
373 / 287 / 97
Регистрация: 17.12.2009
Сообщений: 567
13.03.2010, 13:23
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
3
4
5
6
7
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    test = new zdanie(5);
    //еще какой-то код
}
а куда девается обьект память под который была выделена при инициализации указателя? так разве можно надо это память освободить преред следующим выделеним памяти, наверно...так?
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 13:34
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
3
4
5
6
7
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    test = new zdanie(5);
    //еще какой-то код
}
M128K145, уж больно какой-то специфический и весьма сомнительный способ.

Как я понял, автор хочет вызвать второй конструктор, чтобы установит значение e.
Почему бы не создать метод для его установки?
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
13.03.2010, 14:09
Aye Aye, в Java и C# происходит именно так как я написал.
CyBOSSeR, вопрос был в том как вызвать конструктор, а логика - это дело автора
1
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
13.03.2010, 14:40
В яве с сишарпом происходит, так за это и цену приходится платить соответствующую. А вот в C++ за удалением объектов надо следить самому, выбирая наиболее подходящий для своих целей способ.
1
 Аватар для Sergey_O
5 / 5 / 3
Регистрация: 09.12.2009
Сообщений: 65
13.03.2010, 14:44  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
M128K145, уж больно какой-то специфический и весьма сомнительный способ.

Как я понял, автор хочет вызвать второй конструктор, чтобы установит значение e.
Почему бы не создать метод для его установки?
Через метод не проблема, так и было сделано, просто искал альтернативы в виде ещё одного конструктора.

В данный момент поглядывая в "С ++ - программирование на языке высокого уровня Т.А.Павловская", и там в примерах спокойно используется по 5-6 конструкторов, мне поэтому и было не понятно, как так!)

Благодарю за ответы всех.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
13.03.2010, 14:54
Сейчас проверил что происходит. Если не удалять - то под объект будет выделена еще память, с той памятью неизвестно что. Если удалять, то он заменится и запишется по адресу предыдущего объекта. По этому так
C++
1
2
3
4
5
6
7
8
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    delete test;
    test = new zdanie(5);
    //еще какой-то код
}
Nick Alte, просто в C# и Java есть gc
1
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
13.03.2010, 15:13
1.как сказал M128K145
2.лучше бы вместо второго конструктора юзать метод обыный
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 15:21
Цитата Сообщение от Sergey_O Посмотреть сообщение
В данный момент поглядывая в "С ++ - программирование на языке высокого уровня Т.А.Павловская", и там в примерах спокойно используется по 5-6 конструкторов, мне поэтому и было не понятно, как так!)
Конструктор это метод предназначенный для инициализации объекта в момент создания. В зависимости от потребностей в классе может присутствовать несколько конструкторов, которые по разному позволяют выполнить инициализацию объекта.
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Foo
{
public:
  Foo()
  : bar (0)
  {}
 
  Foo(int bar)
  : bar(bar)
  {}
private:
  int bar;
};
 
int main()
{
  // ...
  Foo foo1;    // Вызывается Foo::Foo()
  Foo foo2(1)  // Вызывается Foo::Foo(int)
  // ...
}
M128K145, если не удалять будет утечка памяти, выделенной первый раз.
0
 Аватар для AnonymC
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
13.03.2010, 15:40
а разве нельзя перегружать констрктор как обычную функцию?
0
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
13.03.2010, 15:46
Медведъ:
Можно, это и есть перегрузка конструкторов.
C++
1
2
  zdanie(int pl, int ob, char adr[30], char vlad[30]);
         zdanie(int el){e=el;};
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.03.2010, 22:39
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Конструктор это метод предназначенный для инициализации объекта в момент создания
Хочется добавить, что конструктор функцией НЕ является. А потому его "вызвать" нельзя
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.03.2010, 22:39
Помогаю со студенческими работами здесь

string обьявленый в классе передать в параметры конструктора
class String{ char str; string str2; public: String(char string){ strcpy(str,string); } String(string newStr){...

Возвращаемый тип конструктора копирования в абстрактном классе
Здравствуйте! Есть абстрактный класс (с "чистыми" виртуальными функциями), и в нем необходимо явно определить конструктор копирования....

Как понять, что реализация конструктора в классе произошла?
VISUAL C++ Как понять что реализация конструктора в классе произошла ?

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

Ошибка "Необъявленный идентификатор" при создании конструктора в наследственном классе
Выдает ошибку Необъявленный идентификатор a b,когда создаю конструктор в наследственном классе #include "stdafx.h" #include...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru