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

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

#include <iostream>

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

int main()
{

}

4 ответа

Решение

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

Это так же, как

class A { ... };

A r;

int main() { ... }

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

Хм, да! В принципе, 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;

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

Другие вопросы по тегам