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

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

Войти
Регистрация
Восстановить пароль
 
 
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
#1

Перегруженный конструктоор- так пойдет? - C++

04.09.2013, 23:15. Просмотров 757. Ответов 24
Метки нет (Все метки)

Почему не пойдет и как бывает?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 class Cat
        {
     public:
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const
        void SetAge (int age);
        void Meow();
      private:
        int itsAge;
        int B;
        Cat( ){itsAge=0; B=8;} 
        ~Cat();
        };
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 23:15     Перегруженный конструктоор- так пойдет?
Посмотрите здесь:

перегруженный конструктор - C++
можно пример перегруженного конструктора ?)

перегруженный синус - C++
#include <iostream> #include <cmath> #define PI 3.14159265; using namespace std; int main(){ double a,b,x,y,e; e=2.71; ...

Перегруженный operator<< - C++
Есть допустим такая дружественная функция: объявление template&lt;typename Type&gt; friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;,...

перегруженный оператор << - C++
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp; operator &lt;&lt; (ostream &amp;c, const...

Перегруженный оператор - C++
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление оператору функций, которых, он изначально не имел. Что...

Перегруженный operator= - C++
Изучаю перегрузку, возник вопрос. Есть класс: class chk { private: int id; int data; public: chk(); chk(int _data);

Функтор и перегруженный оператор - C++
захотел понять многопоточность в новом стадарте с++11 - смотрю http://sergeyteplyakov.blogspot.ru/2012/05/c-11-faq.html#std-threads - вижу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
04.09.2013, 23:34     Перегруженный конструктоор- так пойдет? #2
Dimka-novitsek, ок, если просто создать объект класса Cat?
C++
1
Cat a;
Какой конструктор вызывать С++?

Добавлено через 30 секунд
у вас аж целых две штуки подходят, а один еще и private...
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
04.09.2013, 23:36     Перегруженный конструктоор- так пойдет? #3
Dimka-novitsek, у вас, кстати говоря, деструкторы переобъявлены =/
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
04.09.2013, 23:40     Перегруженный конструктоор- так пойдет? #4
kventin_zhuk, а зачем тут его переопределять? Тут же нету работы с выделением памяти.

Добавлено через 1 минуту
Dimka-novitsek, и вообще можете объяснить логику запихивания конструктора в private? Такое делают, только, что бы лочить класс. Но это по сути изврат ( в С++, так точно).
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
04.09.2013, 23:52  [ТС]     Перегруженный конструктоор- так пойдет? #5
Вы знаете, я и сам не зню, что пишу.

Добавлено через 1 минуту
А деструкторы переобъявлены- это плохо или хорошо?

Добавлено через 2 минуты
А что, конструктор в private не нужен? И что такое лочить класс?

Добавлено через 3 минуты
Я хотел попробовать написать перегруженный конструктор, и обнаружил ошибку компиляции. Спасибо за ответы! Цель написать что-нибудь.
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
04.09.2013, 23:54     Перегруженный конструктоор- так пойдет? #6
Dimka-novitsek, Если я правильно понял, лочить класс - это чтобы обеспечить существования объекта класса в единственном экземпляре(синглтон). Если не то имелось в виду - попрявят.

про деструкторы - Ну а что хорошего?) Вы хотите два одинаковых деструктора всунуть - компилятор негодует)
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
04.09.2013, 23:57  [ТС]     Перегруженный конструктоор- так пойдет? #7
Какая тут может быть работа с выделением памяти ?

Добавлено через 1 минуту
Спасибо!!
А я раньше не обьявлял деструкторы, я про них не очень понял.
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
04.09.2013, 23:58     Перегруженный конструктоор- так пойдет? #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Hotel
{
private:
    int _count;
public:
    Hotel()
    {
        _count = 10;
    }
    Hotel(int count)
    {
        _count = count;
    }
};
вот вам банальный пример перегрузки конструкторов. Если передаем конструктору целое число - задается значение соответствующему полю. Если вызываем конструктор без параметров - задастся значение 10;
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
04.09.2013, 23:58     Перегруженный конструктоор- так пойдет? #9
Димка, переходи на книгу Дейтелов....
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
05.09.2013, 00:03  [ТС]     Перегруженный конструктоор- так пойдет? #10
Спасибо!!
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
05.09.2013, 08:18     Перегруженный конструктоор- так пойдет? #11
kventin_zhuk, лочить класс, ну блокировать его, тобишь, любое наследование от него будет бесполезно, замыкающий класс, как хотите.
reisal78
647 / 560 / 132
Регистрация: 28.04.2013
Сообщений: 1,599
05.09.2013, 09:37     Перегруженный конструктоор- так пойдет? #12
Пара абзацев из Лафоре.

Относительно вашего примера и деструкторов, имеет смысл прочитать вот это:
Деструкторы
Как мы уже видели, особый метод класса - конструктор – вызывается при создании объекта. Как вы, возможно, догадались, существует другая функция, автоматически вызываемая при уничтожении объекта и называемая деструктором. Деструктор имеет имя, совпадающее с именем конструктора (а следовательно, и класса) и предваряющегося символом ~:
C++
1
2
3
4
5
6
7
8
9
10
class Foo
{
private:
    int data;
public:
    Foo():data(0)    // конструктор (имя такое же, как у класса)
    {}
    ~Foo()          // деструктор (то же имя, но с символом ~)
    {}
};
Подобно конструкторам, деструкторы не возвращают значения и не имеют аргументов, поскольку невозможно уничтожение объектов несколькими способами. Наиболее распространенное применение деструкторов - освобождение памяти, выделенной конструктором при создании объекта. Более подробно мы рассмотрим эти действия в главе 10 «Указатели», а пока использование деструкторов не будет иметь для нас большого смысла.
И насчет перегруженных конструкторов:

Речь идет об этом классе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Distance               // длина в английской системе
{
  private:
    int feet;
    float inches;
  public:                   
    Distance() : feet(0),inches(0.0)  // конструктор без аргументов
      { }
 
    Distance(int ft,float in) : feet(ft),inches(in)     // конструктор с двумя аргументами
      { }
};
Перегруженные конструкторы
Было бы удобно производить инициализацию переменных класса Distance в момент их создания, то есть использовать объявления типа
C++
1
Distance width (5, 6.25);
где определяется объект width, сразу же инициализированный значениями 5 и 6.25 для футов и дюймов для футов и дюймов соответственно.
Чтобы сделать это, вызовем конструктор следующим образом:
C++
1
2
Distance(int ft, float in) : feet(ft),inches(in)
      { }
Мы инициализируем поля feet и inches теми значениями, которые передаются конструктору в качестве аргументов.

Тем не менее, мы хотим сохранить возможность определять переменные класса Distance без инициализации.
C++
1
Distance dist1, dist3;
Если Вы в классе не прописываете конструктор без параметров, то компилятор использует встроенный конструктор (конструктор по умолчанию).

Если бы конструктор по умолчанию не создавался автоматически, то мы не смогли бы определять переменные классов, в которых отсутствует конструктор. Зачастую нам хотелось бы чтобы начальные значения полям объекта присваивались также и в конструкторе без параметров. Если возложить эту функция на конструктор по умолчанию, то мы не сможем узнать, какими значениями были инициализированы поля. Если же для нас важно, какими значениями будут инициализированы поля объекта класса, то нам следует явно определить конструктор. В программе ENGLCON мы поступаем подобным образом:
C++
1
2
Distance() : feet(0),inches(0.0)
{ }
Члены класса инициализируются константными значениями, в данном случае целым значением 0 для переменной feet и вещественным значением 0.0 для переменной inches. Значит, мы можем использовать объекты, инициализируемые с помощью конструктора без параметров, будучи уверенными в том, что поля объекта имеют нулевые, а не другие значения.
Теперь у нас имеется два явно определенных конструктора с одним и тем же именем Distance(), и поэтому говорят, что конструктор является перегруженным. Какой из этих двух конструкторов исполняется во время создания нового объекта, зависит от того, сколько аргументов используется при вызове.

C++
1
2
Distance length;            // вызывает  конструктор без параметров, который присвоит  feet(0),inches(0.0)
Distance width(11, 6.0);        // вызывает второй конструктор, который  присвоит полям указанные значения
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
05.09.2013, 13:28     Перегруженный конструктоор- так пойдет? #13
Цитата Сообщение от Wolkodav Посмотреть сообщение
логику запихивания конструктора в private?
для создания синглтонов
Wolkodav
602 / 455 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
05.09.2013, 17:48     Перегруженный конструктоор- так пойдет? #14
Raali, это все клёво, но смысл тогда почти такой же конструктор пихать в public тогда?

Добавлено через 3 минуты
Просто на данном этапе человек судя повсему с ООП на С++ только еще на вы и ему бы просто разобраться...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2013, 21:33     Перегруженный конструктоор- так пойдет?
Еще ссылки по теме:

Не вызывается перегруженный оператор - C++
#include&lt;iostream&gt; using namespace std; struct dates { int num; int count; dates *back; dates *forward; }; class...

Не работает перегруженный оператор - C++
Привет, у меня есть класс такой: class Sterling { private: long pounds = 0; int shillings = 0; int pennys = 0; public:...

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

Глобальный перегруженный оператор - C++
Как организовать работу глобального перегруженного оператора &quot;-&quot;, который должен сравнивать 5 массивов(экземпляры класса). Помогите,...

Перегруженный оператор ввода - C++
Всем привет, как правильно создать перегруженный оператор ввода для инициализации данных об обьекте к примеру class Planet{ ...


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

Или воспользуйтесь поиском по форуму:
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
05.09.2013, 21:33  [ТС]     Перегруженный конструктоор- так пойдет? #15
Ну да, имено!
Yandex
Объявления
05.09.2013, 21:33     Перегруженный конструктоор- так пойдет?
Ответ Создать тему
Опции темы

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