Можно ли таким образом объявить глобальный объектный класс?

Не знаю почему, но этот код работает, что делает эта запись }r; и как она работает? можно ли таким образом объявить глобальный объектный класс?

#include <iostream>

class А
{
    public:
        А()
        {
            std::cout << "Hello World";
        }
}r;

int main()
{

}

person Community    schedule 17.12.2013    source источник
comment
Более уместно просто глобальный объект типа A.   -  person WhozCraig    schedule 17.12.2013
comment
пожалуйста, прочтите здесь stackoverflow.com/questions/2798608/ с уважением   -  person Paulquappe    schedule 17.12.2013


Ответы (4)


Это объявляет глобальную переменную с именем r, имеющую тип A.

Это то же самое, что и

class A { ... };

A r;

int main() { ... }
person Some programmer dude    schedule 17.12.2013

можно ли таким образом объявить глобальный объектный класс?

Ага! По сути, r есть глобальная переменная типа А. C ++ унаследовал от C определенный синтаксис, который позволяет объявлять переменные после определения класса / структуры. Часто из C можно увидеть что-то вроде

struct vertex {
   float x, y;
} my_vertex; // Declares a variable of type vertex

В C ++ struct совпадает с class, за исключением спецификатора доступа по умолчанию.

Вы могли спросить, что означает точка с запятой после определений классов. Итак, в основном класс, определенный как

class my_class {};

с фигурными скобками сразу после точки с запятой не объявляет никаких переменных.

Вы также можете объявить более одной переменной, разделив их оператором запятой.

class my_class {} x, y, z;
person Mark Garcia    schedule 17.12.2013

Он создает один экземпляр class A с именем r. Это почти то же самое, что doint int r;, который сделает глобальное int в этой позиции.

person hetepeperfan    schedule 17.12.2013

возможно, это поможет вам лучше понять.

C ++: объявить глобальный класс и получить к нему доступ из другие классы?

br

person Paulquappe    schedule 17.12.2013