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

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

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

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++
C++ перегруженный оператор <<
C++ Перегруженный оператор
C++ перегруженный конструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
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
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,064
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
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,064
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++ Перегруженный operator<<
Перегруженный постфиксный оператор ++ C++
Перегруженный operator= C++

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

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

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