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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Использование vector insert и своего типа данных http://www.cyberforum.ru/cpp-beginners/thread948526.html
Не понимаю почему вот здесь выскакивает странная ошибка: arr.insert(arr.begin(),(*max)); #include <iostream> #include <iterator> #include <algorithm> #include <vector> #include <numeric> #include <Windows.h>
C++ Отключение деструктора Вопрос такой. Возможно ли каким-то образом предотвратить вызов деструктора при уничтожении объекта? У меня есть вот такой класс самодельных строк. Из-за вызова деструктора ловлю вылет при операции + или *. class String { char *str; int size; int findWord(char symbol, int size) { http://www.cyberforum.ru/cpp-beginners/thread948513.html
C++ Если в строке есть символы подходящие к шаблону заменить их на Один символ!
Добрый вечер. Дисциплина мат. Логика. Дали вот такую задачу Задание №1. Написать программу для реализации следующего алгоритма определения является ли данная строка символов пропозициональной формулой или нет: шаг 1. Проверка скобочного итога формулы. шаг 2. Создать образы формул из правил. шаг 3. Начиная с первого образа произвести замену всех их вхождений в строку символов на...
Передача вместе с сообщением некоторого хеша C++
При передаче информационных сообщений по каналам связи часто возникают ошибки, и получается что полученное сообщение отличается от отправленного. Для борьбы с этим применяют различные коды обнаружения ошибок, а также корректирующие коды, позволяющие исправлять наиболее вероятные ошибки. Одним из методов обнаружения ошибок является передача вместе с сообщением некоторого хеша — контрольной суммы,...
C++ Если каждого консольного процесса существует свой дескриптор буфер экрана, то где именно он находится? http://www.cyberforum.ru/cpp-beginners/thread948497.html
То есть фишка в чём: если мы создадим консольный процесс, а потом ИЗМЕНИМ буфер экрана и сделаем его активным, то чёрта с два мы туда что-нибудь запишем общеизвестными функциям, например system ("dir"): #include <windows.h> #include <stdio.h> using namespace std; int main() { SetConsoleCP(1251);
C++ Кодировка в консоли (на ЕГЭ) В этом году буду писать экзамен, но дело в том, что в visual studio setlocale(LC_ALL,"Rus"); не приводит ни к чему (знаю, что в самой консоли надо настраивать другой шрифт, который поддерживает кириллицу). Из-за такой ерунды могут не зачесть все задания (из-за меня никто не будет настраивать свою консоль, при условии того, что абсолютное большинство пишет на паскале который вроде бы все... подробнее

Показать сообщение отдельно
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
05.09.2013, 23:51     Перегруженный конструктоор- так пойдет?
Если поле данных класса описано с ключевым словом 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"

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