2015-02-28 3 views
-2

Я новичок в C++ и его разработке. Я видел код snippt, но я понятия не имею, что он может сделать anyone please explain what it does. он будет полезен для остальной части кода. любая помощь сообщается.Объяснение кода C++ snippt

TrajectData::TrajectData(int numCamera) 
:_max_pix_num(0) // **what is says after : symbol** 
{ 
    numCamera=3; 

    _numCamera = (numCamera > _MAX_IMAGE) ? _MAX_IMAGE : numCamera; 
    // **above line please explain** 
} 

спасибо.

+0

Его список инициализации члена. [См. Этот ответ] (http://stackoverflow.com/questions/1711990/what-is-this-weird-colon-member-syntax-in-the-constructor/8523361#8523361) – WhozCraig

+0

Для второй строки вы запрашиваете объясните, посмотрите http://stackoverflow.com/questions/392932/how-do-i-use-the-conditional-operator. –

ответ

1

Эта запись

:_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; 
} 

Конечно утверждение еще является излишним для данного конкретного случая, но она отражает семантическую условный оператор.

+0

не могли бы вы объяснить _numCamera = (numCamera> _MAX_IMAGE)? _MAX_IMAGE: numCamera; а также – user3423301

+0

@ user3423301 См. мое обновленное сообщение. –

+0

Благодарю вас, я сделал это как правильный ответ. Большое спасибо – user3423301