Помнится, в свое время доводилось мне проводить собеседования по C++, к которым я относился очень серьезно и поэтому готовился основательно. У меня был список вопросов в стиле «взрыв мозгов», которыми я «пытал» соискателей. Хотя один раз чуть не произошел конфуз. Устраиваться на работу к нам пришел мужик с полным набором атрибутов настоящего программиста – длинные волосы, джинсы, футболка. Поскольку лет ему было около 40, а я только-только окончил институт, то у меня реально очко сжалось, т.к. было непонятно кто кого по C++ рвать будет, я его или он меня )). К счастью обошлось – он оказался джавистом, и пробовался на джавистскую вакансию. Здесь же хочу запостить список вопросов с короткими комментариями. Все вопросы разделены на 3 группы в зависимости от уровня соискателя. Вот вопросы для самого первого уровня...

Помнится, в свое время доводилось мне проводить собеседования по C++, к которым я относился очень серьезно и поэтому готовился основательно. У меня был список вопросов в стиле «взрыв мозгов», которыми я «пытал» соискателей. Хотя один раз чуть не произошел конфуз. Устраиваться на работу к нам пришел мужик с полным набором атрибутов настоящего программиста – длинные волосы, джинсы, футболка. Поскольку лет ему было около 40, а я только-только окончил институт, то у меня реально очко сжалось, т.к. было непонятно кто кого по C++ рвать будет, я его или он меня )). К счастью обошлось – он оказался джавистом, и пробовался на джавистскую вакансию.

Здесь же хочу запостить список вопросов с короткими комментариями. Все вопросы разделены на 3 группы в зависимости от уровня соискателя. Вот вопросы для самого первого уровня.

Дано целое число, надо без циклов заменить в двоичном представлении этого числа самый правый ноль на единицу.

Ну ответ простой i |= ( i + 1 ). К слову, задачку придумал не я, я честно украл её из CBOSS’а ))

Что такое полиморфизм, наследование, инкапсуляция? Что такое динамический полиморфизм и статический? Чем они отличаются?

Базовые понятия, вроде все должны знать, что это такое.

Какие функции будут добавлены в приведенном ниже классе?

	class CSomeClass{};

А вот это уже сложнее – будут созданы конструктор по-умолчанию, конструктор копирования, оператор присваивания и деструктор.

Какая здесь ошибка?

	class CSomeClass{
	public:
		int           *ptr;

         		CSomeClass( void )
         		{
                     		ptr = new int;
                     		*ptr = 1;
         		}

         		~CSomeClass()
         		{
                     		delete ptr;
         		}
  	};
  
  	void              f( CSomeClass ob )
  	{
       		std::cout<<*( ob.ptr )<<std::endl;
  	}

	void              main( int argc , char **argv )
	{
          		CSomeClass         ob;
	          	f( ob );
          		std::cout<<*( ob.ptr )<<std::endl;
	}

Неопределен конструктор копирования, поэтому при передаче объекта в функцию создается его копия. Т.е. у нас появляется 2 объекта, у которых ptr ссылается на одну область памяти. Потом для созданной копии вызывается деструктор, который удаляет общую область памяти. В итоге, когда мы пытаемся вывести значения буфера, то получаем access violation. Какая здесь ошибка?

class	CAssignableClass{
		int			x;
	public:
	
		CAssignableClass( int thex )
		{
			x = thex;
		}

		void		operator = ( const CAssignableClass &ob )
		{
			x = ob.x;
		}
	};

	int main( int argc , char *argv[] )
	{
		CAssignableClass	ob1( 1 ) , ob2( 2 ) , ob3( 3 );

		ob1 = ob2 = ob3;

		return( 0 );
	}

По уму, перегруженные операторы присваивания должны возвращать *this, поскольку в данном примере они ничего не возвращают, то во время двойного присваивания возникает ошибка компиляции. Что-то вроде «can’t assign void».