Извините, вы меня хотите проэкзаменовать?
Не размещать несколько разнородных вопросов в рамках одного вопроса.
auto
во втором случае? конструктор копирования должен вызываться при копирующей инициализации
fillArray
. :)a
прямо из main
, после чего код fillArray
выполняет ряд описанных в нем присвоений.return
в fillArray
становится фиктивен, а локальная переменная выпадает из кода за ненадобностью.struct Pointer;
- это предварительное объявление структуры в пространстве имен типа Holder
.friend struct Pointer;
- тут нужно проявить внимательность.The name of the class that is used in this friend declaration does not need to be previously declared.
When a local class declares an unqualified function or class as a friend, only functions and classes in the innermost non-class scope are looked up, not the global functions
Pointer
будет произведено в том пространстве имен, где определен тип Holder
, а не в его пространстве имен.Holder::Pointer
, требуется сперва сделать предварительное объявление структуры Pointer
в пространстве Holder
.friend Pointer;
чтобы использовать уже объявленное имя вместо создания предварительного объявления этого имени.struct
в строке friend struct Pointer;
. Да и то только если ты пользуешься C++11.Структура, объявленная как вложенная, не получает автоматического доступа
к закрытым членам внешней структуры.
Like any member of its enclosing class, the nested class has access to all names (private, protected, etc) to which the enclosing class has access ...
Pointer
, так и объявление его дружественности. С поправкой, конечно, на C++11. // r2 += "!"; // error: cannot modify through reference to const
...
const std::string& r2 = s1 + s1; // okay: lvalue reference to const extends lifetime
...
std::cout << "lvalue reference to const overload f(" << x << ")\n";
...
Note that rvalue references and lvalue references to const extend the lifetimes of temporary objects
For any type T (including incomplete types), other than function type or reference type ...
References and pointers to cv-qualified types may be implicitly converted to references and pointers to more cv-qualified types.
protected:
формируют интерфейс наследников. Поля в области private:
формируют приватное состояние. Соответственно, публичный интерфейс типа определяется через функции в области public:
. При этом, даже если в публичном интерфейсе есть константная функция-геттер, которая просто возвращает константную ссылку на приватное поле, то это не доступ к приватному полю. Это именно публичный интерфейс, который строго ограничивает возможности работы с состоянием экземпляра и именно так обеспечивает инвариантность этого состояния.Можно добавить getter-ы в interface.
// Грани кубика
Plane UpPlane;
Plane DownPlane;
Plane LeftPlane;
Plane RightPlane;
Plane FrontPlane;
Plane BackPlane;
vector<vector<vector<MiniCube>>> arr;
#include "cubeSolving.h" // алгоритмы решения
#include "rubikCube.h"
cubeSolving() = default;
cubeSolving
и ткнуть решалке решить.
Есть такой подход: Критикуя - предлагай.
Ознакомься с тем, как этот подход работает у меня: [1], [2], [3], [4], [5].
Приходишь и аргументированно, со ссылками на достоверные источники, предлагаешь альтернативу.
У тебя же пока получаются только чайка-коммуникации. Собственно, отношение к тебе у все большего числа людей будет как к чайка-собеседнику.