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

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

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

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

04.09.2013, 23:15. Просмотров 758. Ответов 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 - вижу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
05.09.2013, 21:39     Перегруженный конструктоор- так пойдет? #16
Цитата Сообщение от reisal78 Посмотреть сообщение
Если Вы в классе не прописываете конструктор без параметров, то компилятор использует встроенный конструктор (конструктор по умолчанию).
если ты не объявил ни один конструктор. Если хоть один объявил то "по умолчанию" пропадает

Добавлено через 2 минуты
Цитата Сообщение от Raali Посмотреть сообщение
для создания синглтонов
а как объект создавать?
там еще одна тонкость есть нужно переопределить new чтобы он и вызывал приват конструктор
следовательно объект можешь создать только динамически
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
05.09.2013, 21:45  [ТС]     Перегруженный конструктоор- так пойдет? #17
А вот я решил в private создать функцию, для опыта. Конструктор там, видимо, почти плностью бисполезен, т.к. все что там находится видно только внутри класса, и его можно проще написать в public.
Компилятор ругается- перед функцией ему точки с запятой не хватает.. И т.п.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <string> 
#include <iostream> // для объекта cout
using namespace std;
 
   class Cat
        {
     public:
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   //статический метод
      private:
        int itsAge; // статические переменные класса (Статическое поле)
        int B;
        Void Bam(itsAge=0; B=8; ){cout << "Wydam\n";
                                  int BG=itsAge+ B;
                                  cout << BG;   } 
        
        };
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
05.09.2013, 21:52     Перегруженный конструктоор- так пойдет? #18
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Void Bam(
может все таки void

Добавлено через 1 минуту
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
private:
int itsAge; // статические переменные класса (Статическое поле)
это не статическое а частное (private) т.е обращаться может только сам класс
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
05.09.2013, 22:04  [ТС]     Перегруженный конструктоор- так пойдет? #19
Спасибо!!!!

Добавлено через 9 минут
ВикипедиЯ
Класс (программирование)

Как и структуры, классы могут задавать поля — то есть переменные, принадлежащие либо непосредственно самому классу (статические), либо экземплярам класса (обычные). Статические поля существуют в одном экземпляре на всю программу (или, в более сложном варианте, — в одном экземпляре на процесс или на поток/нить). Обычные поля создаются по одной копии для каждого конкретного объекта — экземпляра класса.

Добавлено через 1 минуту
Конечно, я может что-то не понял...
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
05.09.2013, 22:14     Перегруженный конструктоор- так пойдет? #20
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Конечно, я может что-то не понял...
ага
у статического ключевое слово static
вот если бы ты написал
C++
1
static int itsAge;
то itsAge было бы статическим
хоть сто объектов создай itsAge будет один

чтобы понять разницу
попробуй вот эти два кода
C++
1
2
3
4
5
6
7
8
void fnc(void)
{
int s=0;
printf("%d ",++s);
}
........................
for(int i=0;i<10;i++)
  fnc();
и
C++
1
2
3
4
5
6
7
8
void fnc(void)
{
static int s=0;
printf("%d ",++s);
}
........................
for(int i=0;i<10;i++)
  fnc();
reisal78
647 / 560 / 132
Регистрация: 28.04.2013
Сообщений: 1,601
05.09.2013, 23:51     Перегруженный конструктоор- так пойдет? #21
Если поле данных класса описано с ключевым словом static, то значение этого поля будет одинаковым для всех объектов данного класса. Статические данные класса полезны в тех случаях, когда необходимо, чтобы все объекты включали в себя какое-либо одинаковое значение. Статическое поле по своим характеристикам схоже со статической переменной: оно видимо только внутри класса, но время его жизни совпадает со временем жизни программы. Таким образом, статическое поле существует даже в том случае, когда не существует ни одного объекта класса. Тем не менее, в отличие от статической переменной функции, предназначенной для сохранения значения между вызовами, статическая переменная класса используется для хранения данных, совместно используемых объектами класса.
Для того чтобы понять, зачем могут использоваться статические переменные класса, представьте себе следующую ситуацию. Допустим, вам необходимо, что-бы объект вашего класса располагал информацией, сколько еще объектов этого же класса существует на данный момент в памяти.

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
#include <iostream>
using namespace std;
 
class foo
{
private:
    static int count;   //общее поля для всех объектов 
                        //(в смысле объявления)
public:
    foo()               //инкрементирование при создании объекта
    {count++;}
 
    int getcount()      //возвращает значение count
    {return count;}
};
 
int foo::count = 0;     //определение count
 
int main()
{setlocale (LC_ALL,"");
    foo f1, f2, f3;     //создание трех объектов
    //каждый объект видит одно и тоже значение
    cout << "Число объектов: "<< f1.getcount() << endl;
    cout << "Число объектов: "<< f2.getcount() << endl;
    cout << "Число объектов: "<< f3.getcount() << endl;
}
В этом примере класс foo содержит единственное поле count, имеющее тип static int. Конструктор класса инкрементирует значение поля count. В функции main() мы определяем три объекта класса foo. Поскольку конструктор в этом случае вызывается трижды, инкрементирование поля count также происходит трижды. Метод getcount() возвращает значение count.

Если бы мы использовали не статическое, а автоматическое поле count, то конструктор увеличивал бы на единицу значение этого поля для каждого объекта. Т.е результат бы выглядел "1 1 1" а не "3 3 3"

Может все же стоит это почитать? Очень понятно все расписано )
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
05.09.2013, 23:56     Перегруженный конструктоор- так пойдет? #22
Цитата Сообщение от reisal78 Посмотреть сообщение
Если бы мы использовали не статическое, а автоматическое поле count,
то у нас бы не скомпилировалось вот это
Цитата Сообщение от reisal78 Посмотреть сообщение
int foo::count = 0;
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
06.09.2013, 00:15  [ТС]     Перегруженный конструктоор- так пойдет? #23
А вот, ошибка. Посмотрите пожалуста, какие правила я нарушил.

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
#include <string> 
#include <iostream> // для объекта cout
using namespace std;
 
   class Cat
        {
     public:
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   
      private:
        int itsAge; 
        int B;
        Cat(){itsAge=0; B=8;};
        void Bam( ){cout << "Wydam\n";
                                  int BG=itsAge+ B;
                                  cout << BG;   } 
        
        };
                                          
 // конструктор класса Cat
  Cat::Cat(int initialAge)
   {
   itsAge = initialAge;
   cout << "Cat constructor\n";
   }
 
  Cat::~Cat() // деструктор, который не выполняет никаких действий
  {
  cout << "Cat destructor\n";
  }
 
 
 int Cat::Bgsamm() const
 {
  return (itsAge++);
cpp(37): error C2039: Bgsamm: не является членом "Cat"

Добавлено через 1 минуту
О, Спасибо!!!!!
ValeryS
Модератор
6552 / 5018 / 463
Регистрация: 14.02.2011
Сообщений: 16,739
06.09.2013, 00:21     Перегруженный конструктоор- так пойдет? #24
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
int Cat::Bgsamm() const
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Bgsamm: не является членом "Cat"
найди в описании своего класса такую функцию
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 08:34     Перегруженный конструктоор- так пойдет?
Еще ссылки по теме:

Не вызывается перегруженный оператор - 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{ ...


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

Или воспользуйтесь поиском по форуму:
reisal78
647 / 560 / 132
Регистрация: 28.04.2013
Сообщений: 1,601
06.09.2013, 08:34     Перегруженный конструктоор- так пойдет? #25
Цитата Сообщение от ValeryS Посмотреть сообщение
то у нас бы не скомпилировалось вот это
Согласен, не заметил =)
Yandex
Объявления
06.09.2013, 08:34     Перегруженный конструктоор- так пойдет?
Ответ Создать тему
Опции темы

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