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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
13.03.2010, 12:26     2 Конструктора в Классе #1
Мой класс:
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");
Как мне воспользоваться вторым?

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

Заранее благодарю за ответ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2010, 12:26     2 Конструктора в Классе
Посмотрите здесь:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? C++
C++ Известны оценки по физике каждого ученика двух классов.Определить средниюю оценку в каждом классе.Количество учащихся в каждом классе одинаковое!
Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе C++
вызов конструктора C++
string обьявленый в классе передать в параметры конструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 12:39     2 Конструктора в Классе #2
Sergey_O, никак, точнее, не зачем.
Создай методы установки/получения значения e.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.03.2010, 12:42     2 Конструктора в Классе #3
C++
1
2
3
4
5
6
7
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    test = new zdanie(5);
    //еще какой-то код
}
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
13.03.2010, 13:23     2 Конструктора в Классе #4
Цитата Сообщение от M128K145 Посмотреть сообщение
C++
1
2
3
4
5
6
7
int main()
{
    zdanie *test = new zdanie(1337,12,"Tver","Velo");
    //еще какой-то код
    test = new zdanie(5);
    //еще какой-то код
}
а куда девается обьект память под который была выделена при инициализации указателя? так разве можно надо это память освободить преред следующим выделеним памяти, наверно...так?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 13:34     2 Конструктора в Классе #5
Цитата Сообщение от 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.
Почему бы не создать метод для его установки?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.03.2010, 14:09     2 Конструктора в Классе #6
Aye Aye, в Java и C# происходит именно так как я написал.
CyBOSSeR, вопрос был в том как вызвать конструктор, а логика - это дело автора
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
13.03.2010, 14:40     2 Конструктора в Классе #7
В яве с сишарпом происходит, так за это и цену приходится платить соответствующую. А вот в C++ за удалением объектов надо следить самому, выбирая наиболее подходящий для своих целей способ.
Sergey_O
 Аватар для Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
13.03.2010, 14:44  [ТС]     2 Конструктора в Классе #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
M128K145, уж больно какой-то специфический и весьма сомнительный способ.

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

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

Благодарю за ответы всех.
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
13.03.2010, 14:54     2 Конструктора в Классе #9
Сейчас проверил что происходит. Если не удалять - то под объект будет выделена еще память, с той памятью неизвестно что. Если удалять, то он заменится и запишется по адресу предыдущего объекта. По этому так
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
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
13.03.2010, 15:13     2 Конструктора в Классе #10
1.как сказал M128K145
2.лучше бы вместо второго конструктора юзать метод обыный
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 15:21     2 Конструктора в Классе #11
Цитата Сообщение от 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, если не удалять будет утечка памяти, выделенной первый раз.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
13.03.2010, 15:40     2 Конструктора в Классе #12
а разве нельзя перегружать констрктор как обычную функцию?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.03.2010, 15:46     2 Конструктора в Классе #13
Медведъ:
Можно, это и есть перегрузка конструкторов.
C++
1
2
  zdanie(int pl, int ob, char adr[30], char vlad[30]);
         zdanie(int el){e=el;};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2010, 22:39     2 Конструктора в Классе
Еще ссылки по теме:

C++ Ошибка "Необъявленный идентификатор" при создании конструктора в наследственном классе
C++ Возвращаемый тип конструктора копирования в абстрактном классе
В классе инициализировать массив, в классе создать функцию вывода массива на экран C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16827 / 5248 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
13.03.2010, 22:39     2 Конструктора в Классе #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Конструктор это метод предназначенный для инициализации объекта в момент создания
Хочется добавить, что конструктор функцией НЕ является. А потому его "вызвать" нельзя
Yandex
Объявления
13.03.2010, 22:39     2 Конструктора в Классе
Ответ Создать тему
Опции темы

Текущее время: 06:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru