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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
#1

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

13.03.2010, 12:26. Просмотров 2814. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2010, 12:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 2 Конструктора в Классе (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 12:39 #2
Sergey_O, никак, точнее, не зачем.
Создай методы установки/получения значения e.
1
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.03.2010, 12:42 #3
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
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
13.03.2010, 13:23 #4
Цитата Сообщение от 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
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 13:34 #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.
Почему бы не создать метод для его установки?
1
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.03.2010, 14:09 #6
Aye Aye, в Java и C# происходит именно так как я написал.
CyBOSSeR, вопрос был в том как вызвать конструктор, а логика - это дело автора
1
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
13.03.2010, 14:40 #7
В яве с сишарпом происходит, так за это и цену приходится платить соответствующую. А вот в C++ за удалением объектов надо следить самому, выбирая наиболее подходящий для своих целей способ.
1
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
13.03.2010, 14:44  [ТС] #8
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
M128K145, уж больно какой-то специфический и весьма сомнительный способ.

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

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

Благодарю за ответы всех.
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.03.2010, 14:54 #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
1
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
13.03.2010, 15:13 #10
1.как сказал M128K145
2.лучше бы вместо второго конструктора юзать метод обыный
0
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
13.03.2010, 15:21 #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, если не удалять будет утечка памяти, выделенной первый раз.
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
13.03.2010, 15:40 #12
а разве нельзя перегружать констрктор как обычную функцию?
0
Genius Ignat
1236 / 774 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
13.03.2010, 15:46 #13
Медведъ:
Можно, это и есть перегрузка конструкторов.
C++
1
2
  zdanie(int pl, int ob, char adr[30], char vlad[30]);
         zdanie(int el){e=el;};
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
13.03.2010, 22:39 #14
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Конструктор это метод предназначенный для инициализации объекта в момент создания
Хочется добавить, что конструктор функцией НЕ является. А потому его "вызвать" нельзя
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2010, 22:39
Привет! Вот еще темы с ответами:

В чём отличия конструктора копирования и конструктора перемещения? Где и как их нужно использовать? - C++
Помогите разобраться в копирующем и перемещающем конструкторах. В чём их существенное отличие и какой плюс от использования перемещающего...

В классе инициализировать массив, в классе создать функцию вывода массива на экран - C++
Прошу помоши с выводом данных, которые содержаться в массиве, на экраy: Задача: В классе инициализировать массив, в классе создать...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе - C++
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot. Скажите как объявить, что бы один из...

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B? - C++
#include <windows.h> #include <iostream> using namespace std; //Вот главный класс class A{ public: A (){}; class...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.03.2010, 22:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru