Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
1

Действие конструктора вобще не понял

11.09.2013, 13:35. Просмотров 856. Ответов 22
Метки нет (Все метки)

Вобще не понял, зачем нужен конструктор.
Ведь написано Как же инициализировать переменные-члены класса? Для этого в классе используется специальная функция-член, называемая конструктором.

Я думал, конструктор нужен только потому, что в классе нельзя написать просто int initialAge=5 и как- либо работать с переменной.

Я теперь наоборот в легком шоке. Переменную, инициализированную в конструкторе, не видно! Так таки зачем он тогда нужен??

Если можно, приведите пару-тройку понятных примеров использования конструктора, пожалуста! Где он и каким бывает и что и как делает.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <string> 
#include <iostream> // для объекта cout
using namespace std;
 
#include<iomanip>
//Этот файл содержит большую часть манипуляторов C++. Если вы не знаете, что такое манипулятор, не беспокойтесь. Просто подключите это файл вместе с iostream, хуже не станет.
#include<fstream> 
//Подключается при работе с файлами.
 
   class Cat
        {
     public:
        
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   //статический метод
        int Bgsamm();
        void Metod(int);
      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() 
 {
  return (itsAge++); 
 }
 
 
 
 
 // определение функции SetAge как открытого
 // метода доступа к данным класса
 void Cat::SetAge(int age)
 {
    // присваиваем переменной-члену itsAge
    // значение переданного парйметра age
  itsAge = age;
 }
 
 
 
      // Определение метода Meow
      // возвращает void
      // параметров нет
      // используется для вывода на экран текста "Meow"
  void Cat::Meow()
  {
  cout << "Meow.\n";
  }
 
 
 
  Cat obyekt;
  void Cat::Metod (int tselaya=100) //обычный метод
  {tselaya=tselaya+initialAge; cout << tselaya;cout << "  целая\n";}      
 
 int main()
 {
     Cat Frisky; 
     Frisky.Meow();
    
     cout << obyekt.GetAge();
     obyekt.Bgsamm();
     obyekt.Wydam();
     obyekt. Bam();
     obyekt.Metod();
     system("pause");
    return 0;
 }

1>d:\проги\resheniecathapi8pi\cathapi8pi\cathapi8pi.cpp(79): error C2065: initialAge: необъявленный идентификатор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 13:35
Ответы с готовыми решениями:

Не понял в С++ зачем нужны ссылки в функциях и Перегрузку конструктора!
Мож кто разьяснит в этих темам что и для чего они нужны!обяз с примерами!

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

Функция в обьекте-можно ли создать?Нужно ли?Что я вобще делаю?И как правильно?
Простите еще и за русские буквы... Cat::объект; объект void Метод (int...

При работе с символами адрес вместо адреса иероглифы, а с символьными массивами вобще ошибки.
/* 1) int a; int *b=&amp;a; cout&lt;&lt;b&lt;&lt;endl; 2)...

Не понял ошибку
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; int...

22
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
11.09.2013, 13:41 2
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Переменную, инициализированную в конструкторе, не видно!
А как вы на нее смотрите?
Вот тут ее должно быть видно:
C++
1
cout << obyekt.GetAge();
(строка 86)
1
User409368
191 / 168 / 32
Регистрация: 09.09.2013
Сообщений: 524
11.09.2013, 13:43 3
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так таки зачем он тогда нужен??
конструктор автоматически вызывается при создании объекта. в нем можно проинициализировать private переменные

а вот чтобы получить доступ к этим самым private переменным, нужна public функция. И только через эту функцию можно изменить переменные. Это сделано в целях безопасности. У кого нет правд доступа к private-переменным класса, тот и не должен туда лезть
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 13:46  [ТС] 4
Я в полной запутанасти.
...Ну, хорошо. Значит, конструктор- это как функция, но порядком ущербная, наружу в принципе ничего не может выдать... ??

Добавлено через 26 секунд
А! Вижу ответы!! Спасибо!!!
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
11.09.2013, 13:47 5
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
наружу в принципе ничего не может выдать
Ее суть - в создании объекта. И может он наружу выдать.
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 14:02  [ТС] 6
Может, ее там и видно, да, не спорю.

А чем вызвана указаная компилятором ошибка? Как было бы правильно ее инициализировать?

Добавлено через 9 минут
А вот пример- из книги. Чесно, не понял, а зачем конструкторов два? Это перегруженый конструктор и его используют только для примера? Так нет, когда конструктор был и точно перегруженным, то я не мог создать обьект- компилятор ругался!

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Листинг 6.4. Использование конструкторов и деструкторов.
 
1: // Пример объявления конструктора и
 
2: // деструктора в классе Cat
 
3:
 
4: #include <iostream.h> // для объекта cout
 
5:
 
6: class Cat // начало объявления класса
 
7: {
 
8: public: // начало открытого раздела
 
9:    Cat(int initialAge); // конструктор
 
10:   ~Cat(); //деструктор
 
11:   int GetAge(); // метод доступа
 
12:   void SetAge(int age); // метод доступа
 
13:   void Meow();
 
14: private: // начало закрытого раздела
 
15:   int itsAge; // переменная-член
 
16: };
 
17:
 
18: // конструктор класса Cat
 
19: Cat::Cat(int initialAge)
 
20: {
 
21:    itsAge = initialAge;
 
22: }
 
23:
 
24: Cat::~Cat() // деструктор, не выполняющий действий
 
25: {
 
26: }
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
11.09.2013, 14:07 7
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А чем вызвана указаная компилятором ошибка?
Тем что вот в этом месте (77 строка):
C++
1
2
3
  Cat obyekt;
  void Cat::Metod (int tselaya=100) //обычный метод
  {tselaya=tselaya+initialAge; cout << tselaya;cout << "  целая\n";}
Вы пытаетесь обратится к переменной initialAge, которой не существует. Она не объявлена нигде. Она упоминается только как имя передаваемого параметра в описании самого конструктора:
C++
1
Cat::Cat(int initialAge)
Вне конструктора она не видна.
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Как было бы правильно ее инициализировать?
Не совсем верно. Ее не надо инициализировать. В данном случае надо воспользоваться методам класса, возвращающим значение этой переменной:
C++
1
2
3
  Cat obyekt;
  void Cat::Metod (int tselaya=100) //обычный метод
  {tselaya=tselaya+GetAge; cout << tselaya;cout << "  целая\n";}
где GatAge описан как:
C++
1
2
3
4
 int Cat::GetAge() 
 {
  return itsAge; 
 }

Не по теме:

Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А вот пример- из книги
Архангельский? ))


Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Это перегруженый конструктор
Где?
1
User409368
191 / 168 / 32
Регистрация: 09.09.2013
Сообщений: 524
11.09.2013, 14:08 8
поясню назначение конструкторов.

Допустим есть класс для хранения даты рождения:
У него отсутствует конструктор, но есть две функции. одна устанавливает дату, другая печатает дату

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
class BirthDate
{
private:
    int day;    // допустимые значения 1..31 (в разные месяцы по-разному)
    int month;  // 1..12
    int year;   // приблизительно 1900..2100 (можно другое установить)
 
public:
    void SetDate(int d, int m, int y)
    {
        day = (d>=1 && d<=31) ? d : 1;
        month = (m>=1 && m<=12) ? m : 1;
        year = (y>=1900 && y<=2100) ? m : 1900;
    }
 
    void Show() const
    {
        cout << day << "/" << month << "/" << year << endl;
    }
};
 
 
int main()
{
    BirthDate   d;
 
    // случайно забыли вызвать функцию для установки даты
 
    d.Show();   // 0/0/2147315712
 
    return 0;
}
даты 0/0/2147315712 вообще не существует и последствия от этого в дальнейшем могут оказаться печальными

Но если бы у нас был конструктор
C++
1
2
3
4
BirthDate(int d, int m, int y)
{
    SetDate(d, m, y);
}
то уже пришлось бы создавать объект таким способом:
BirthDate d(11, 9, 2013);

т.е. точно указывать дату рождения. и по другому никак.
следовательно в объекте d в принципе не могут находится ошибочные данные,
т.к. при создании объекта автоматически вызывается конструктор, устанавливающий правильную дату
а все остальные попытки изменить ее проверяются функцией SetDate()
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 14:40  [ТС] 9
СПАСИБО!!!

Добавлено через 8 минут
Архангельский? ))
Джесс Либерти: Освой самостоятельно C++ за 21 день

Где?
Вот
C++
1
Cat(int initialAge); // конструктор
C++
1
2
3
4
5
// конструктор класса Cat
Cat::Cat(int initialAge)
{
  itsAge = initialAge;
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
11.09.2013, 15:16 10
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Вот
Нет. Это не перегруженный конструктор. В этом примере в девятой строке объявление констрктора:
C++
1
Cat(int initialAge); // конструктор
А в девятнадцатой реализация:
C++
1
2
3
4
5
// конструктор класса Cat
Cat::Cat(int initialAge)
{
  itsAge = initialAge;
}
Можно было и прям в классе написать это все, ничего бы не изменилось. Но так делается, разносится для удобочитаемости. Если много кода. Чтобы не загромождать перечисление методов класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Cat // начало объявления класса
{
public: // начало открытого раздела
Cat(int initialAge)
  {
  itsAge = initialAge;
  }; // конструктор
~Cat(); //деструктор
int GetAge(); // метод доступа
void SetAge(int age); // метод доступа
void Meow();
private: // начало закрытого раздела
int itsAge; // переменная-член
};
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 16:14  [ТС] 11
Спасибо!!!

А вот, ну не пойму, что тут компилятору не нравится.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <string> 
#include <iostream> // для объекта cout
using namespace std;
 
#include<iomanip>
//Этот файл содержит большую часть манипуляторов C++. Если вы не знаете, что такое манипулятор, не беспокойтесь. Просто подключите это файл вместе с iostream, хуже не станет.
#include<fstream> 
//Подключается при работе с файлами.
 
   class Cat
        {
     public:
        
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   //статический метод
        int Bgsamm();
        void Metod(int);
      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() 
 {
  return (itsAge++); 
 }
 
 
 
 
 // определение функции SetAge как открытого
 // метода доступа к данным класса
 void Cat::SetAge(int age)
 {
    // присваиваем переменной-члену itsAge
    // значение переданного парйметра age
  itsAge = age;
 }
 
     int Cat::GetAge()
      {
       return itsAge;
      }
 
 
 
      // Определение метода Meow
      // возвращает void
      // параметров нет
      // используется для вывода на экран текста "Meow"
  void Cat::Meow()
  {
  cout << "Meow.\n";
  }
 
 
 
  Cat obyekt;
  void Cat::Metod (int tselaya=100) //обычный метод
  {tselaya=tselaya+GetAge(); cout << tselaya;cout << "  целая\n";}    
 
 int main()
 {
     Cat Frisky; 
     Frisky.Meow();
    
     cout << объект.GetAge();
     obyekt.Bgsamm();
     obyekt.Wydam();
     obyekt. Bam();
     obyekt.Metod();
     system("pause");
    return 0;
 }
1>d:\проги\resheniecathapi8pi\cathapi8pi\cathapi8pi.cpp(65): error C2511: int Cat::GetAge(void): перегруженная функция-член не найдена в "Cat"
0
coloc
погромист
411 / 247 / 30
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
11.09.2013, 17:48 12
Dimka-novitsek,
Кликните здесь для просмотра всего текста
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <string> 
#include <cstdlib>
#include <iostream> // äëÿ îáúåêòГ* cout
using namespace std;
 
#include<iomanip>
//Ýòîò ГґГ*éë ñîäåðæèò áîëüøóþ Г·Г*Г±ГІГј Г¬Г*Г*èïóëÿòîðîâ C++. Åñëè ГўГ» Г*ГҐ Г§Г*Г*ГҐГІГҐ, Г·ГІГ® ГІГ*êîå Г¬Г*Г*èïóëÿòîð, Г*ГҐ áåñïîêîéòåñü. Ïðîñòî ïîäêëþ÷èòå ГЅГІГ® ГґГ*éë âìåñòå Г± iostream, õóæå Г*ГҐ Г±ГІГ*Г*ГҐГІ.
#include<fstream> 
//Ïîäêëþ÷Г*ГҐГІГ±Гї ïðè Г°Г*áîòå Г± ГґГ*éëГ*ìè.
 
   class Cat
        {
     public:
        
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // ìåòîä äîñòóïГ* const ГґГіГ*êöèÿ äîñòóïГ* ГЄ Г¤Г*Г*Г*ûì-÷ëåГ*Г*Г¬ ГЄГ«Г*Г±Г±Г* ГЎГҐГ§ ГЇГ°Г*ГўГ* ГЁГµ èçìåГ*ГҐГ*ГЁГї
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   //Г±ГІГ*ГІГЁГ·ГҐГ±ГЄГЁГ© ìåòîä
        int Bgsamm();
        void Metod(int);
      private:
        int itsAge; // Г±ГІГ*ГІГЁГ·ГҐГ±ГЄГЁГҐ ïåðåìåГ*Г*ûå ГЄГ«Г*Г±Г±Г* (ÑòГ*òè÷åñêîå ïîëå)
        int B;
       
       public: 
    //  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() 
 {
  return (itsAge++); 
 }
 
 
 
 
 // îïðåäåëåГ*ГЁГҐ ГґГіГ*êöèè SetAge ГЄГ*ГЄ îòêðûòîãî
 // ìåòîäГ* äîñòóïГ* ГЄ Г¤Г*Г*Г*ûì ГЄГ«Г*Г±Г±Г*
 void Cat::SetAge(int age)
 {
    // ïðèñâГ*ГЁГўГ*ГҐГ¬ ïåðåìåГ*Г*îé-÷ëåГ*Гі itsAge
    // Г§Г*Г*Г·ГҐГ*ГЁГҐ ïåðåäГ*Г*Г*îãî ГЇГ*ðéìåòðГ* age
  itsAge = age;
 }
 
     int Cat::GetAge() const
      {
       return itsAge;
      }
 
 
 
      // ÎïðåäåëåГ*ГЁГҐ ìåòîäГ* Meow
      // âîçâðГ*Г№Г*ГҐГІ void
      // ГЇГ*Г°Г*ìåòðîâ Г*ГҐГІ
      // èñïîëüçóåòñÿ äëÿ âûâîäГ* Г*Г* ГЅГЄГ°Г*Г* ГІГҐГЄГ±ГІГ* "Meow"
  void Cat::Meow()
  {
  cout << "Meow.\n";
  }
 
 
 
  Cat obyekt;
  void Cat::Metod (int tselaya=100) //îáû÷Г*ûé ìåòîä
  {tselaya=tselaya+GetAge(); cout << tselaya;cout << "  Г¶ГҐГ«Г*Гї\n";}    
 
 int main()
 {
     Cat b; 
     b.Meow();
    
     cout << b.GetAge();
     b.Bgsamm();
     b.Wydam();
     b.Bam();
     b.Metod();
     system("pause");
    return 0;
 }

Учись оформлять код нормально, невозможно читать такой набор символов
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 20:22  [ТС] 13
Спасибо!!!

Добавлено через 2 часа 27 минут
Интересно. Совершено понятно, что компилятор заругался на строку 100- функция использует приватную переменную. А вот на строку 99 obyekt.Wydam(); не заругался, а void Wydam() {Bam();}; Использует этот самый Bam()!!!


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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <iostream> // для объекта cout
using namespace std;
 
#include<iomanip>
//Этот файл содержит большую часть манипуляторов C++. Если вы не знаете, что такое манипулятор, не беспокойтесь. Просто подключите это файл вместе с iostream, хуже не станет.
#include<fstream> 
//Подключается при работе с файлами.
 
 
   class Cat
{
     public:
        Cat(int initialAge=5); 
        ~Cat();
        int GetAge() const; // метод доступа const функция доступа к данным-членам класса без права их изменения
        void SetAge (int age);
        void Meow();
        void Wydam()  {Bam();};   //статический метод
        int Bgsamm();
        void Metod(int);
      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() 
 {
  return (itsAge++); 
 }
 
 
 
 
                                 // определение функции SetAge как открытого
                                 // метода доступа к данным класса
      void Cat::SetAge(int age)  // присваиваем переменной-члену itsAge
      {
                    itsAge = age;// значение переданного парйметра age
      }
 
 
 
 
     int Cat::GetAge()const
      {
       return itsAge;
      }
 
 
 
                           // Определение метода Meow
                           // возвращает void
                           // параметров нет
                           // используется для вывода на экран текста "Meow"
            void Cat::Meow()
             {
              cout << "Meow.\n";
             }
 
 
 
    Cat obyekt;
                  void Cat::Metod (int tselaya=100) //обычный метод
                  {tselaya=tselaya+GetAge(); cout << tselaya;cout << "  целая\n";}    
 
 
 
 int main()
 {
     Cat Frisky; 
     Frisky.Meow();
    
     cout << obyekt.GetAge();
     obyekt.Bgsamm();
     obyekt.Wydam();
     obyekt. Bam();
     obyekt.Metod();
     system("pause");
    return 0;
 }
1>d:\проги\resheniecathapi8pi\cathapi8pi\cathapi8pi.cpp(100): error C2248: Cat::Bam: невозможно обратиться к private член, объявленному в классе "Cat"
0
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 20:41  [ТС] 14
Закомментировал строку сто. Мявкает, выдает!
0
Миниатюры
Действие конструктора вобще не понял  
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 20:50  [ТС] 15
Почему он пишет Cat constructor дважды???????

Добавлено через 6 минут
А где же "Cat destructor\n";??
0
User409368
191 / 168 / 32
Регистрация: 09.09.2013
Сообщений: 524
11.09.2013, 21:05 16
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
А где же "Cat destructor\n";??
могу предположить, что деструктор вызывается сразу же после return 0; (в функции main).
и после этого программа сразу же закрывается, и результат "Cat destructor" просто не успеваешь рассмотреть

Добавлено через 2 минуты
что бы увидеть эту строчку, заверните этот кусочек программы в дополнительные фигурные скобки


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 int main()
 {
    {
         Cat Frisky; 
         Frisky.Meow();
        
         cout << obyekt.GetAge();
         obyekt.Bgsamm();
         obyekt.Wydam();
         obyekt. Bam();
         obyekt.Metod();
     }  // здесь вызовется деструктор объекта
     
     system("pause");
    return 0;
 }
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 21:17  [ТС] 17
Спасибо!!
0
User409368
191 / 168 / 32
Регистрация: 09.09.2013
Сообщений: 524
11.09.2013, 21:23 18
Пожалуйста )
1
Dimka-novitsek
14 / 14 / 2
Регистрация: 26.04.2012
Сообщений: 1,091
11.09.2013, 22:44  [ТС] 19
Да!!!!!

Добавлено через 1 час 5 минут
Удивительно и непонятно, что
C++
1
2
3
 Cat obyekt;
                  void Cat::Metod (int tselaya=100) //обычный метод
                  {tselaya=tselaya+GetAge(); cout << tselaya;cout << "  целая\n";}
выдает 6109 !!!!!!! Тогда как GetAge() выдает 5.Как и должно , собствено.
1
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
12.09.2013, 10:13 20
Dimka-novitsek, вы уж меня извините, но что за хренотень вы пытаетесь написать? Х) Точнее, во что вы хотите превратить код из учебника? Или это в книжке написано: "вот базовый код, а сейчас мы будем прикручивать к нему какой-нибудь безумнейший метод. Да так, чтобы все читающие еще и сломали себе глаза. Ах-ха-ха (гомерический смех автора)."?
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
 
using namespace std;
 
 
class Cat
{
public:
  Cat( int initialAge = 5 );
  ~Cat();
  int GetAge() const;
  void SetAge( int age );
  void Meow();
  int Bgsamm();
  void Metod( int );
private:
  int itsAge;
};
 
Cat::Cat(int initialAge)
  {
  itsAge = initialAge;
  cout << "Completed construction of a Cat" << endl;
  }
 
Cat::~Cat()
  {
  cout << "Cat destroyed. To death" << endl;
  }
 
int Cat::Bgsamm()      // Метод дня рождения?
  {
  return (itsAge++);
  }
 
void Cat::SetAge( int age )
  {
  itsAge = age;
  }
 
int Cat::GetAge()const
  {
  return itsAge;
  }
 
void Cat::Meow()
  {
  cout << "Meow." << endl;
  }
 
void Cat::Metod( int tselaya = 100 ) //// Метод выводит возраст кота
  {                                    //   с прибавкой по умолчанию ста лет (за каким-то чертом)
  tselaya = tselaya + GetAge();        //   (из раздела сколько бы было
  cout << tselaya << endl;             //      ему лет, через сто лет)
  }                                  ////    При чем сам возраст от этого не изменится
 
Cat obyekt; // Какой-то глобальный кот
 
int main()
{
  {
  Cat Frisky; // Кот, живущий только в main-е. (рождается по умолчанию пятилетним)
  Cat Barsik(666); // Барсик сразу рождается шестьсот шестьдесят шестидесяти летним
 
  Frisky.Meow(); // Фриски мяукает
  Barsik.Meow(); // Барсик мяукает
  obyekt.Meow(); // Объект мяукает
 
  cout << "obyekt age: " << obyekt.GetAge() << endl;; // Получить и вывести на экран возраст объекта
  int BarsikAge = Barsik.GetAge();                    // Получить и запомнить возраст Барсика (просто так)
 
  obyekt.Bgsamm(); // Состарить объект на один год
  Barsik.Bgsamm(); // День рождения Барсика
 
  cout << "obyekt age: " << obyekt.GetAge() << endl;; // Вывести текущий
  cout << "Barsik age: " << Barsik.GetAge() << endl;; //     возраст обоих
 
  Barsik.SetAge(1000);                               // Состарить Барсика до тысячелетнего возраста
  cout << "Barsik age: " << Barsik.GetAge() << endl; // Отобразить это
 
  obyekt.Metod();    // Выведет возраст объекта + 100
  Barsik.Metod(999); // Выведет возраст Барсика + 999
  }
 
system("pause");
 
bool DogEaster = false;
while(!DogEaster)       // Заставить объект мяукать
  obyekt.Meow();        //       до собачьей пасхи
 
return 0;
}
Вот. С вас пол часа моей жизни.


Цитата Сообщение от ___ Посмотреть сообщение
могу предположить, что деструктор вызывается сразу же после return 0; (в функции main).
и после этого программа сразу же закрывается, и результат "Cat destructor" просто не успеваешь рассмотреть
Угу. А у Объекта вообще деструктор вызовется только по завершению окна консоли.
1
12.09.2013, 10:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 10:13

Правильно ли я понял условие ?
1) Нахожу обратную матрицу для очередной матрицы 2) Сравниваю полученную...

не понял. битовые поля
Опишите битовое поле для хранения следующей информации (размер задавать по...

объясните задачу, ничего не понял
дали семестровую, тема объектно ориентированное программирование, классы,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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