Эта запись
:_max_pix_num(0)
в определении конструктора означает, что элемент данных _max_pix_num
класса строится (инициализирован), используя значение инициализатора 0.
Когда конструктор класса называется он вызывает конструкторы своих членов данных в том порядке, в котором они объявлены в определении класса. Если вы не укажете явным образом, какой конструктор для элемента данных должен использоваться, то конструктор класса вызовет конструктор по умолчанию элемента данных. Вы можете явно указать, какой конструктор должен использоваться для члена данных, и какие аргументы должны быть предоставлены конструктору для инициализации элемента данных.
Ниже приведен пример
struct A
{
A(int init) : x(init * init), y (init * x)
{
}
int x, y;
};
//...
A a(10);
std::cout << "a.x = " << a.x << ", a.y = " << a.y " << std::endl;
Вывод будет
a.x = 100, a.y = 1000
Что касается этой линии
_numCamera = (numCamera > _MAX_IMAGE) ? _MAX_IMAGE : numCamera;
то используется так называемый условный (или тройные) оператора ,
если выражение
(numCamera > _MAX_IMAGE)
имеет значение истинно, то _MAX_IMAGE присваивается _numCamera. В противном случае _numCamera присваивается самому себе. То есть этот оператор позволяет установить _numCamera со значением, которое не больше, чем _MAX_IMAGE.
На самом деле вы можете заменить условный оператор на следующий фрагмент код
if (numCamera > _MAX_IMAGE)
{
_numCamera = _MAX_IMAGE;
}
else
{
_numCamera = _numCamera;
}
Конечно утверждение еще является излишним для данного конкретного случая, но она отражает семантическую условный оператор.
Его список инициализации члена. [См. Этот ответ] (http://stackoverflow.com/questions/1711990/what-is-this-weird-colon-member-syntax-in-the-constructor/8523361#8523361) – WhozCraig
Для второй строки вы запрашиваете объясните, посмотрите http://stackoverflow.com/questions/392932/how-do-i-use-the-conditional-operator. –