crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Описание глобальных переменных
RazrFalcon
  опции профиля:
сообщение 19.9.2011, 12:04
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


В чем разница между этими вариантами?

1)
int value;

MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent)
{
}

Теперь в хедере пишем:
private:
  int value;
и
2)
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent)
{
  value = 20;
}
3)
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  value(20)
{
}


Я понимаю что это вроде бы основы, но четко разницу я так и не понял до сих пор...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 19.9.2011, 13:41
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


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

Пример:
int globalVar;

class Class
{
public:
    Class(QString className):
        name(className)
    {
      localVar = 0;
    }

    void print()
    {
      globalVar++;
      qDebug() << name << " global:" << globalVar;

      localVar++;
      qDebug() << name << " local:" << localVar;
    }

private:
    int localVar;
    QString name;
};


...
    globalVar = 0;
    Class *c1 = new Class("Class1");
    Class *c2 = new Class("Class2");

    c1->print();
    c2->print();
    c1->print();
    c2->print();


Выведет
"Class1"  global: 1 
"Class1"  local: 1
"Class2"  global: 2
"Class2"  local: 1
"Class1"  global: 3
"Class1"  local: 2
"Class2"  global: 4
"Class2"  local: 2


Теперь про 2 и 3 варианты. В 2 создастся экземпляр класса (вызывается конструктор без параметров), а потом присваивается значение. В 3 сразу создается экземпляр с нужным значением, т.е. используется конструктор с параметром. Для int-а разницы нет, но если вместо будет класс (особенно тяжелый), то 3-й выриант эффективнее.

Еще есть такое понятие как безопасный конструктор, но пока можешь с этим не парится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.1.2025, 16:43