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

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

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

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

04.09.2013, 23:15. Просмотров 773. Ответов 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();
        };
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 23:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегруженный конструктоор- так пойдет? (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
05.09.2013, 21:39 #16
Цитата Сообщение от reisal78 Посмотреть сообщение
Если Вы в классе не прописываете конструктор без параметров, то компилятор использует встроенный конструктор (конструктор по умолчанию).
если ты не объявил ни один конструктор. Если хоть один объявил то "по умолчанию" пропадает

Добавлено через 2 минуты
Цитата Сообщение от Raali Посмотреть сообщение
для создания синглтонов
а как объект создавать?
там еще одна тонкость есть нужно переопределить new чтобы он и вызывал приват конструктор
следовательно объект можешь создать только динамически
1
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;   } 
        
        };
0
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
05.09.2013, 21:52 #18
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Void Bam(
может все таки void

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

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

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

Добавлено через 1 минуту
Конечно, я может что-то не понял...
0
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
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();
1
reisal78
В поисках работы, СПб
658 / 571 / 136
Регистрация: 28.04.2013
Сообщений: 1,633
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"

Может все же стоит это почитать? Очень понятно все расписано )
1
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
05.09.2013, 23:56 #22
Цитата Сообщение от reisal78 Посмотреть сообщение
Если бы мы использовали не статическое, а автоматическое поле count,
то у нас бы не скомпилировалось вот это
Цитата Сообщение от reisal78 Посмотреть сообщение
int foo::count = 0;
2
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 минуту
О, Спасибо!!!!!
0
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
06.09.2013, 00:21 #24
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
int Cat::Bgsamm() const
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Bgsamm: не является членом "Cat"
найди в описании своего класса такую функцию
1
reisal78
В поисках работы, СПб
658 / 571 / 136
Регистрация: 28.04.2013
Сообщений: 1,633
06.09.2013, 08:34 #25
Цитата Сообщение от ValeryS Посмотреть сообщение
то у нас бы не скомпилировалось вот это
Согласен, не заметил =)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 08:34
Привет! Вот еще темы с ответами:

Функции и перегруженный оператор - C++
Помогите реализовать на С++: 1.Определить пользовательский тип данных fraction (дробь), представляющий собой структуру из 2х полей:...

Перегруженный оператор присваивания - C++
Достаточно информации прочитал, что такое перегруж. оператор присваивания, но не до конца понимаю суть данного вопроса - &quot;в каком месте...

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

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


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

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

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