Interesting C/C++ interview questions

muzhik
Уже с Приветом
Posts: 629
Joined: 09 Jan 1999 10:01
Location: Израиль -> Redmond, WA -> Израиль... -> ?

Post by muzhik »

nastya12 wrote:PPS> Нет, я не совсем это имела в виду... Я _не_ имела в виду сделать какие-то static data members. Просто, если конструктор сделать private, A a возможно, a A *a = new A() - нет...


Если конструктор сделать private, то и A a - также невозможно.
Дык,
Мужик
User avatar
nastya12
Уже с Приветом
Posts: 2622
Joined: 17 Jun 2003 04:41
Location: Canada

Post by nastya12 »

Oops :oops: ... Тогда действительно придется делать псевдоконструктор, который возвращает referense to a newly created object или еще как-то исхитряться
Dislexics of the world, untie!
Michael Popov
Уже с Приветом
Posts: 991
Joined: 09 Sep 2001 09:01
Location: The Earth

Post by Michael Popov »

muzhik wrote:Если конструктор сделать private, то и A a - также невозможно.

Code: Select all

class A
{
public:
   A* get() {
      static A а; // ради забавы можно убрать static - все-равно
      return & а; // откомпилируется
   }

private:
   A() {}
};
Best regards,

Michael Popov
muzhik
Уже с Приветом
Posts: 629
Joined: 09 Jan 1999 10:01
Location: Израиль -> Redmond, WA -> Израиль... -> ?

Post by muzhik »

Michael Popov wrote:
muzhik wrote:Если конструктор сделать private, то и A a - также невозможно.

Code: Select all

class A
{
public:
   A* get() {
      static A а; // ради забавы можно убрать static - все-равно
      return & а; // откомпилируется
   }

private:
   A() {}
};


Ну, ежели изнутри класса творить объект - тогда конечно. У меня в первом примере фактически то же самое. Но в предложении "сделать конструктор private" речь шла не об этом...

Или я опять неправильно понял? (задумчиво) я пью тормозную жидкость...
Дык,
Мужик
User avatar
Rookie
Новичок
Posts: 66
Joined: 07 Jul 2002 23:19
Location: Kiev, UA <-> Baltimore, MD

Post by Rookie »

aleh wrote:
Rookie wrote:
Tango wrote:"Now, how to access the n-th bit of a word without a bit-shift operation?"


Умножением единицы на 2 необходимое число раз, пока не получится нужная маска? :)

Tango wrote:....а уже на десерт:
"How to access the n-th bit of a word without a bit-shift or mask operation?"


Делить на 2 пока нужный бит не станет LSB, а потом взять результат модулю 2?

Это все шутки, конечно, хотя формально - вполне корректное решение поставленной задачи. Или Вы имели в виду решение, сравнимое по эффективности с использованием сдвигов и логических операций?



Так деление или умножение тот же шифт и есть даже хуже.
А на последний вопрос можно еще и union предложить создать
с переменной на каждый бит

Конечно, это шифт, и неэффективный. Просто в условии было "without a bit-shift operation", т.е. без >> / <<, так что формально это тоже решение.
Unions, конечно, намного лучше. Хотя у меня есть подозрение, что в машинном коде использование такого union c битовыми полями все равно породит те же шифты и маски. Поправьте меня, если это не так.
User avatar
roadman
Уже с Приветом
Posts: 707
Joined: 12 Mar 2003 22:29
Location: Moscow->Bay Area, CA

Post by roadman »

muzhik wrote:Ну, ежели изнутри класса творить объект - тогда конечно. У меня в первом примере фактически то же самое. Но в предложении "сделать конструктор private" речь шла не об этом...

Или я опять неправильно понял? (задумчиво) я пью тормозную жидкость...


1. Статический случай:

class OnlyStatic
{
public:
OnlyStatic() {}
private:
static void* operator new(unsigned int size) { return ::operator new(size); }
};

2. Динамически1 случай

class OnlyDynamic
{
private:
OnlyDynamic() {}
public:
static OnlyDynamic* create() { return new OnlyDynamic(); }
};

OnlyStatic ss;
OnlyStatic* sd = new OnlyStatic(); // error

OnlyDynamic ds; // error
OnlyDynamic* dd = OnlyDynamic::create();
The philosophy of one century is the common sense of the next. --Henry Ward Beecher
User avatar
roadman
Уже с Приветом
Posts: 707
Joined: 12 Mar 2003 22:29
Location: Moscow->Bay Area, CA

Post by roadman »

adb wrote:
roadman wrote:Вот ещё пример из реальной практики
....
Вопрос, чему будут равны resAdd и resSub?


Ответ 8 и 2. А то, что MSVC 6.0 на этом спотыкается, так это проблема MSVC6 (точнее одна из многих его проблем с шаблонами). Intel 8.0 выдает корректный результат.

Браво! А можете ответить почему спотыкается? Что при этом происходит?
The philosophy of one century is the common sense of the next. --Henry Ward Beecher
muzhik
Уже с Приветом
Posts: 629
Joined: 09 Jan 1999 10:01
Location: Израиль -> Redmond, WA -> Израиль... -> ?

Post by muzhik »

Получается, я таки правильно понял условие... но всё равно стормозил.

... сел читать всю тему... и теперь понимаю, чем была навеяна задачка...
Last edited by muzhik on 15 Apr 2004 23:33, edited 1 time in total.
Дык,
Мужик
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

roadman wrote:
adb wrote:
roadman wrote:Вот ещё пример из реальной практики
....
Вопрос, чему будут равны resAdd и resSub?


Ответ 8 и 2. А то, что MSVC 6.0 на этом спотыкается, так это проблема MSVC6 (точнее одна из многих его проблем с шаблонами). Intel 8.0 выдает корректный результат.

Браво! А можете ответить почему спотыкается? Что при этом происходит?


Проблема в том, что один из шаблонных параметров шаблона функции 'do_something' (поледний) не используется в параметрах функции. На заре спецификации С++ это было требованием, чтобы все шаблонные параметры использовались тем или иным образом в параметрах функции. Потом это требование отменили и в стандарт языка оно не вошло. Но вот в MSVC 6 оно имеет место до сих пор.

Заставить это код работать правильно в MSVC 6 можно путем формального удовлетворения вышеуказанного тербования введением фиктивного параметра функции 'do_something':

Code: Select all

template < typename T1, typename T2, typename С > 
T1 do_something(T1 var1, T2 var2, C* = NULL)
...
Best regards,
Андрей
Quater
Уже с Приветом
Posts: 571
Joined: 17 Aug 2000 09:01
Location: Seattle, WA

Post by Quater »

Вопросы С++ вызывают дискуссии на 7 страниц, чего это вы, язык то мертвый... гы :mrgreen:
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

Quater wrote:Вопросы С++ вызывают дискуссии на 7 страниц, чего это вы, язык то мертвый... гы :mrgreen:


Троллишь, значит, понемножку. Ну что ж, куплюсь. Мертвый язык или нет - характеристика на абсолютная, а относительная, и "вычисляется" она на основе сравнения живости язков друг с другом. Т.к. более живых языков, чем С++, на сегодняшний день не существует и, более того, не предвидится в ближайшие десятилетия, называть язык С++ "мертвым" можно только для раздувания демагогии и бессмысленого флейма. Классический троллинг, короче.
Best regards,
Андрей
muzhik
Уже с Приветом
Posts: 629
Joined: 09 Jan 1999 10:01
Location: Израиль -> Redmond, WA -> Израиль... -> ?

Post by muzhik »

Quater wrote:Вопросы С++ вызывают дискуссии на 7 страниц, чего это вы, язык то мертвый... гы :mrgreen:


Это Ц-острый - мертворождённый. Чтобы он стал по-настоящему массовым, надо чтобы весь мир перешёл на .Net, или чтобы появились альтернативные платформы Ц-острого, или ..., или .......

Все "или" упираются в одно: Мелкомягк не захочет выпускать Ц-острый из-под своего контроля, не даст его стандартизировать каким-то "комиссиям", сделает его изменчивым, как Win API. Ну так и судьба C# будет как у Win API (а в худшем случае - как у Java), а весь мир (не-Windows/enterprise) останется на C++. А жаль, кстати, мне C# больше нравится именно как язык - он исправляет некоторые недостатки C++ как OO языка (struct, multiple inheritance), и при этом не уродует его как Java.

В общем, типичная ситуация: люди в MS толковые, постарались, а политика фирмы - ... :(

Всё это IMHO, конечно.
Дык,
Мужик
muzhik
Уже с Приветом
Posts: 629
Joined: 09 Jan 1999 10:01
Location: Израиль -> Redmond, WA -> Израиль... -> ?

Post by muzhik »

Хотя - чего это я решил, что здесь зарыт намёк на C#?.. Тоже купился... :D
Дык,
Мужик
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Post by Boriskin »

muzhik wrote:мне C# больше нравится именно как язык - он исправляет некоторые недостатки C++ как OO языка (struct, multiple inheritance), и при этом не уродует его как Java.


Елси я правильно понял, вы считаете что выделенное есть нехорошо? Почему так?
Тупизна как Энтропия. Неумолимо растет.
User avatar
AndreyT
Уже с Приветом
Posts: 3003
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Post by AndreyT »

Boriskin wrote:
muzhik wrote:мне C# больше нравится именно как язык - он исправляет некоторые недостатки C++ как OO языка (struct, multiple inheritance), и при этом не уродует его как Java.


Елси я правильно понял, вы считаете что выделенное есть нехорошо? Почему так?


Это ерунда какая-то. Независимое дополнительное свойство языка никак не может являться недостатком. В принципе.Никто никого не заставляет использовать mutliple inheritance в С++. Поэтому о назывании mutliple inheritance "недостатком" не может быть и речи.
Best regards,
Андрей

Return to “Работа и Карьера в IT”