И, наконец, вопросы третьего уровня.
Что вернет функция int f( int i , int j , int k ){return(k);}, если её вызвать так:
int i( 1 ); std::cout<<f( ++i , ++i , ++i )<<std::cout;
Что такое undefined behaviour? Приведите примеры, когда программа начинает себя так вести.
В данном случае как раз undefined behaviour и поэтому сказать, что именно вернет функция, нельзя. Связано это с тем что порядок вычисления параметров функции неопределен стандартом. Ну а что касается примера – файл с C++ кодом должен заканчиваться символом переноса строки, иначе это ub ))
Что неправильно в данном коде:
template< int n >class t{}; // ... for( int i( 0 ) ; i < 10 ; i++ ) { t< i > ob; }
Параметры инстанциации шаблона должны быть известны компилятору на этапе компиляции. А в данном случае получается, что они неизвестны. Поэтому и возникнет ошибка в строчке t.
Сколько байт в памяти займет приведенный ниже класс?
class CSomeClass{ public: int *ptr; virtual void f( void ){} };
Во-первых, у нас есть виртуальная функция, поэтому в объекте всегда будет присутствовать указатель таблицу виртуальных функций, и занимать, как правило, 4 байта. Во-вторых, есть указатель на целое число. Он, в зависимости от платформы, может занимать 2, 4 или 8 байт 4 (то же самое относится и к указателю на таблицу виртуальных методов).
Что будет выведено на экран?
void f( int i ) { std::cout<<i<<std::endl; } int main( int argc , char *argv[] ) { f( ( 0 , 1 , 2 ) ); _getch(); return( 0 ); }
Здесь обыгрывается тот факт, что в C++ запятая это оператор действующий слева направо. Поэтому в функцию f будет передано значение «2».
Расскажите про паттерны проектирования (например, абстрактная фабрика, MVC, Посетитель, Стратегия), для чего они нужны, какие из них Вам доводилось использовать на практике?
Ну, тут какого-то конкретного ответа дать нельзя. Просто этот вопрос является поводом побеседовать ))