Проходил сегодня тест в сабже... С практическими вопросами нет проблем... В теории не могу понять суть вопросов и суть ответов (((
Я себе их скопировал.
Может, Вы поможете мне на них ответить или даже перевести(хотя бы ответ)
Вы наверное скажете, что я могу сам это сделать, наверное да... Но мне еще готовиться к собеседованию, которое в 14:00)
Вдруг они мне попадутся...
Заранее спасибо тем, кто поможет
Why does your class have a pure virtual function?
1 To ensure that this function is overridden in derived classes that are to be instantiated
2 To maximize the execution speed of the function provided that memory is not at a premium Choice 3
3 To maximize code reuse
4 To maximize the memory efficiency provided that execution speed is not at a premium
5 To allow for templated classes to be used with friend functions
Вроде бы 1) но толком понять не могу
A function throws an exception of type std::unexpected. Referring to the scenario above, what is a logical cause?
1 An exception is thrown in which the type is not in the function's exception specification.
2 An exception of type std::unexpected can never be thrown in a well-formed C/C++ program.
3 An exception thrown is not yet caught and the destructor for an object throws an exception during the stack unwinding.
4 The application is targeting one operating system, but another operating system is being used, which generates the exception.
5 There is no catch-all enabled in scope closest to the function call.
Which one of the following statements is true in regarding the overloading of the ++ operator?
1 You must use a dummy parameter to define a prefix increment operator.
2 You cannot define a postfix increment operator.
3 You cannot define a prefix increment operator.
4 You must use a dummy parameter to define a postfix increment operator.
5 You cannot define both a prefix increment and postfix increment operator for a class.
class A
{
public:
void f();
protected:
A(){}
A(const &A) {}
}
Referring to the sample code above, why are the default and copy constructors declared as protected?
1 To ensure that A cannot be instantiated on the stack
2 To ensure that instances of A cannot be created via new by a more derived class
3 To ensure that instances of A can only be created by subclasses of A
4 To ensure that instances of A cannot be copied
5 To ensure that A cannot be used as a base class
What is the purpose of the friend keyword?
1 It informs the linker that the current class should be linked closely to the friend class or function.
2 It allows the friend function to be notified when member variables change.
3 It allows the friend class or function to access the current class's private members.
4 It allows the current class to access the friend classes' private members.
5 It specifies that the friend functions or classes are allowed to use a class.
If a class inherits from another and overrides a virtual function, how must the exception-specification for the derived (overridden) function be related to the base function?
1 It must be at least as restrictive.
2 Derived functions cannot have exception-specifications.
3 It must be the same.
4 Virtual functions cannot have exception-specifications.
5 It must be less restrictive.
Where do you initialize a non-static class member that is a reference?
1 Point of declaration and member initialization list
2 Point of declaration only
3 Member initialization list only
4 Body of constructor only
5 Member initialization list and body of constructor
Referring to the sample code above, which one of the following statements is true regarding the declaration of done?
1 done guarantees that it only throws RangeErr and character pointer exceptions.
2 done is an extern void; therefore, it does not throw exceptions.
3 done guarantees that it only throws char* exceptions.
4 done guarantees that it only throws integer exceptions.
5 done guarantees that it only throws RangeErr exceptions
With regard to enumeration types, which one of the following statements is true?
1 When an enumerator is used, its value is implicitly converted to an integer when needed.
2 Enumerators for which no value is explicitly specified have a value of zero.
3 Enumeration types must be defined in the body of a class definition.
4 An integer can implicitly be converted to an enumeration type.
5 Only one identifier in an enum list can have the value zero.
What kind of variable do you use if you need to share a variable from one instance of a class to the next?
1 volatile
2 auto
3 protected
4 register
5 static
В довесок
Which one of the following is the correct way to declare a pointer to non-static member function of class A that accepts an int reference and returns void?
1 void (A*::f)(int&);
2 void (A::f*)(int&);
3 void (A::f)(int&);
4 void (*A::f)(int&);
5 void (A::*f)(int&);
Which one of the following statements replaces all elements in an integer sequence that is delimited by start and end and in which the value is less than 10 with 10?
Здравствуйте, XFREE86, Вы писали:
XFR>Вы наверное скажете, что я могу сам это сделать, наверное да... Но мне еще готовиться к собеседованию, которое в 14:00)
Так! Все, кто сегодня в 14:00 ждут претендентов на собеседование по С++ напряглись...
Дык набрал-то скока?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, XFREE86, Вы писали:
XFR>>Вы наверное скажете, что я могу сам это сделать, наверное да... Но мне еще готовиться к собеседованию, которое в 14:00) E>Так! Все, кто сегодня в 14:00 ждут претендентов на собеседование по С++ напряглись...
E>Дык набрал-то скока?
Score: 3.75
Percentile: Scored higher than 85% of previous examinees
Demonstrates a clear understanding of many advanced concepts within this topic. Appears capable of mentoring others on most projects in this area.
Strong Areas
* Construction and Destruction
* Types
* Templates
* Standard Template Library
Здравствуйте, XFREE86, Вы писали:
XFR>Заранее спасибо тем, кто поможет
Why does your class have a pure virtual function?
1 To ensure that this function is overridden in derived classes that are to be instantiated
XFR>Вроде бы 1) но толком понять не могу
А чего тут понимать? Чисто виртуальную функцию имеет смысл лепить только если нужно чтобы наследник её обязательно реализовал, либо чтобы избежать инстанцирования класса (игры в чисто виртуальный деструктор например), но второе явно не учтено в ответах, а остальные явно левые.
A function throws an exception of type std::unexpected. Referring to the scenario above, what is a logical cause?
1 An exception is thrown in which the type is not in the function's exception specification.
std::unexpected кидается если компилятор умеет спецификации исключений... например MSVC 2005 не умеет, так что вопрос конечно сомнительный с практической точки зрения. Но отвечается так.
Which one of the following statements is true in regarding the overloading of the ++ operator?
1 You must use a dummy parameter to define a prefix increment operator.
4 You must use a dummy parameter to define a postfix increment operator.
Здесь ответ выбирается между этими двумя. Какой выбрать? Ну если помните чем переопределение a++ отличается от переопределения ++a... =)
Referring to the sample code above, why are the default and copy constructors declared as protected?
4 To ensure that instances of A cannot be copied
Зачем бы защищать конструкторы копирования... неужели... чтобы класс не мог быть скопирован? Удивительно =)
What is the purpose of the friend keyword?
Такое не знать? Позор. У меня вы бы собеседование в 14-00 не прошли.
If a class inherits from another and overrides a virtual function, how must the exception-specification for the derived (overridden) function be related to the base function?
1 It must be at least as restrictive.
3 It must be the same.
5 It must be less restrictive.
А вот здесь нужно выбрать из этих трёх. Логика выбора такая: может ли переопределённая функция (скажем в классе реализации) кинуть больше исключений чем её прототип в скажем чисто абстрактном классе-интерфейсе? А меньше? Не знаете? Тогда го читать Страуструпа.
Where do you initialize a non-static class member that is a reference?
Стыдно не знать. Набираем тестовый код и медитируем, там немного попробовать-то.
Referring to the sample code above, which one of the following statements is true regarding the declaration of done?
1 done guarantees that it only throws RangeErr and character pointer exceptions.
Ну я понимаю человек который заключает код в теги [c#] не обязан разбираться в спецификации исключений....
В общем мне надоело Вопросы простые, ответить на них неправильно можно разве что случайно либо не зная языка вообще. Учебник C++ в зубы, через годик самому смешно будет перечитывать.
Здравствуйте, XFREE86, Вы писали:
XFR>Добрый день.
XFR>Проходил сегодня тест в сабже... С практическими вопросами нет проблем... В теории не могу понять суть вопросов и суть ответов ((( XFR>Я себе их скопировал.
XFR>Может, Вы поможете мне на них ответить или даже перевести(хотя бы ответ) XFR>Вы наверное скажете, что я могу сам это сделать, наверное да... Но мне еще готовиться к собеседованию, которое в 14:00)
Перед смертью не надышишься.
С вопросами в чём проблема ?
Про unexpected и throw(const char*, RangeErr) — может и зря спрашивают фича бесполязна и сознательно сломана разработчиками "делфотного компилятора".
Остальные вопросы как вопросы. Трудности перевода или пробелы в знаниях ?
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, XFREE86, Вы писали:
XFR>>Добрый день.
XFR>>Проходил сегодня тест в сабже... С практическими вопросами нет проблем... В теории не могу понять суть вопросов и суть ответов ((( XFR>>Я себе их скопировал.
XFR>>Может, Вы поможете мне на них ответить или даже перевести(хотя бы ответ) XFR>>Вы наверное скажете, что я могу сам это сделать, наверное да... Но мне еще готовиться к собеседованию, которое в 14:00)
AG>Перед смертью не надышишься.
AG>С вопросами в чём проблема ? AG>Про unexpected и throw(const char*, RangeErr) — может и зря спрашивают фича бесполязна и сознательно сломана разработчиками "делфотного компилятора". AG>Остальные вопросы как вопросы. Трудности перевода или пробелы в знаниях ?
AG>PS: AG>
AG>- What is the purpose of the friend keyword?
AG>- To do the Barton-Nackman trick!
Трудности перевода... Было бы все на русском, я бы все понял)
Спасибо... А автор предыдущего сообщения видимо меня не понял
T>A function throws an exception of type std::unexpected. Referring to the scenario above, what is a logical cause?
T>1 An exception is thrown in which the type is not in the function's exception specification.
T>std::unexpected кидается если компилятор умеет спецификации исключений... например MSVC 2005 не умеет, так что вопрос конечно сомнительный с практической точки зрения. Но отвечается так.
я хоть и не имею отношения к топик-стартеру, но позвольте задать вопрос.
разве std::unexpected это класс исключения?
я думал, это функция, которая вызывается при нарушении функцией спецификации исключений, и которую можно заместить своей, вызвав std::setunexpected().
Why does your class have a pure virtual function?
Зачем классу нужны чисто виртуальные функции?
1 To ensure that this function is overridden in derived classes that are to be instantiated
Чтобы обеспечить перекрытие функции в классах насладниках, которые будут воплощены.
A function throws an exception of type std::unexpected. Referring to the scenario above, what is a logical cause?
Функция книула исключение типа std::unexpected.
Относительно вышеописанной ситуации, какова лагоческая причина.
Which one of the following statements is true in regarding the overloading of the ++ operator?
Что из нижеперечисленного истино отностиельно перегрузки оператора ++
4 You must use a dummy parameter to define a postfix increment operator.
Необходимо использовать лишний параметр для поствиксного инкремента.
Referring to the sample code above, why are the default and copy constructors declared as protected
Относительно примера выше зачем дефолтный и коприующий конструкторы объявлены защищёнными.
3 To ensure that instances of A can only be created by subclasses of A
Чтобы обеспечить создание экземпляров А только наследниками А.
What is the purpose of the friend keyword?
Какова цель ключевого слова friend.
3 It allows the friend class or function to access the current class's private members.
Позволяет классу или функции другу получать доступ к приватным членам текущего класса
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, XFREE86, Вы писали:
XFR>>Трудности перевода...
AG>Why does your class have a pure virtual function? AG>Зачем классу нужны чисто виртуальные функции?
AG>1 To ensure that this function is overridden in derived classes that are to be instantiated AG>Чтобы обеспечить перекрытие функции в классах насладниках, которые будут воплощены.
AG>A function throws an exception of type std::unexpected. Referring to the scenario above, what is a logical cause? AG>Функция книула исключение типа std::unexpected. AG>Относительно вышеописанной ситуации, какова лагоческая причина.
AG>Which one of the following statements is true in regarding the overloading of the ++ operator? AG>Что из нижеперечисленного истино отностиельно перегрузки оператора ++ AG>4 You must use a dummy parameter to define a postfix increment operator. AG>Необходимо использовать лишний параметр для поствиксного инкремента.
AG>Referring to the sample code above, why are the default and copy constructors declared as protected AG>Относительно примера выше зачем дефолтный и коприующий конструкторы объявлены защищёнными.
AG>3 To ensure that instances of A can only be created by subclasses of A AG>Чтобы обеспечить создание экземпляров А только наследниками А.
AG>What is the purpose of the friend keyword? AG>Какова цель ключевого слова friend. AG>3 It allows the friend class or function to access the current class's private members. AG>Позволяет классу или функции другу получать доступ к приватным членам текущего класса
Спасибо огромное...
Надо подтягивать английский
Как говорил Ленин "Ту Лён, Ту Лён и еще раз Ту Лён"
Здравствуйте, _Dreamer, Вы писали:
_D>я хоть и не имею отношения к топик-стартеру, но позвольте задать вопрос. _D>разве std::unexpected это класс исключения? _D>я думал, это функция, которая вызывается при нарушении функцией спецификации исключений, и которую можно заместить своей, вызвав std::setunexpected().
Они видимо имели ввиду std::bad_exception.
Я не заметил, ни тем ни другим не пользовался...
Здравствуйте, Alexander G, Вы писали:
AG>Они видимо имели ввиду std::bad_exception. AG>Я не заметил, ни тем ни другим не пользовался...
А может это вопрос-ловушка (обман зрения, так сказать ) и за правильный ответ считается:
2 An exception of type std::unexpected can never be thrown in a well-formed C/C++ program.
?
S>А может это вопрос-ловушка (обман зрения, так сказать ) и за правильный ответ считается: S>2 An exception of type std::unexpected can never be thrown in a well-formed C/C++ program. S>? S>
Тогда тоже бред:
void f()
{
try
{
throw std::unexpected; // well formed
}
catch(std::unexpected un) // well formed
{
un();
}
}
Здравствуйте, Alexander G, Вы писали:
AG>Они видимо имели ввиду std::bad_exception. AG>Я не заметил, ни тем ни другим не пользовался...
просто не совсем очевидный вопрос, по моему.
function declaration не приведено, даже если имелось ввиду именно какое то исключение — ну и что? может у нее оно было в спецификации.
Здравствуйте, _Dreamer, Вы писали:
_D>я хоть и не имею отношения к топик-стартеру, но позвольте задать вопрос. _D>разве std::unexpected это класс исключения? _D>я думал, это функция, которая вызывается при нарушении функцией спецификации исключений, и которую можно заместить своей, вызвав std::setunexpected().
А можно я тоже подкину несколько вопросов, которые вызвали у меня затруднения, и, даже после размышления и чтения литературы, я не уверен в ответе.
============================================== Вопрос 1.
Which one of the following describes how data abstraction is used?
Вопрос 2.
Which one of the following describes the concept of inheritance?
Набор ответов к ним одинаковый:
1. It is used to cause late binding through a base type in order to achieve extensibility.
2. It is used to express the similarities between types through base and derived types.
3. It is used to express the similarities between objects that are semantically identical.
4. It is used to hide the implementation details of a defined type.
5. It is used to package attributes and functionality in order to create a new data type.
--------
Возможно, существуют еще другие вопросы к данному набору ответов.
Поэтому интересно попробовать решить обратную задачу: определить, какой термин описывается каждым из ответов.
1. Polymorphism
2. Inheritance (ответ на вопрос 2)
3. ???
4. Data abstraction (ответ на вопрос 1)
5. Encapsulation
Насчет 3 — не могу сообразить. Остальное правильно?
============================================== Вопрос 3.
Referring to the above sample code, which one of the following statements is true?
1. Sizeof(myclass) is 0.
2. MyClass will not have a vtable.
3. Void is an illegal constructor argument type.
4. The assignment operation is invalid.
5. MyClass is declared incorrectly.
----------
С вариантами 1-3 разобраться относительно несложно. В них содержится конкретное утверждение, надо лишь определить, верное оно, или нет. И ответ можно четко аргументировать, например, привести цитаты из стандарта.
Короче, 1, 2, 3 неверны.
С вариантами типа 4 и 5 сложнее. В них — туманная фраза типа "где-то тут есть ошибка". А где? И есть ли она? И как аргументировать ответ?
Я, например, не вижу ничего плохого в операторе присваивания. Хотя, может, я плохо смотрю? Итак, четвертый вариант, вроде, тоже неверен.
Остается вариант 5. "MyClass определен некорректно". Единственная ошибка, которую я вижу — отсутствие точки с запятой после закрывающейся скобки. Как-то несерьезно... Скорее, похоже на опечатку. Кстати, опечатки у Brainbench-а действительно встеречаются.
Итак, мой ответ — 5 (отсутствие ";"), но он мне не нравится. Может, ответ все-таки другой, а я его в упор не вижу?
============================================== Вопрос 4.
class Base {
public:
Base();
virtual ~Base();
};
class Derived: protected Base {
public:
virtual ~Derived();
};
int main()
{
Base *pb=new Derived;
return 0;
}
Question: What is the error in the sample code above?
1. "Derived" cannot have a virtual destructor in a derived class.
2. "pb" cannot be type cast from "Derived" to "Base".
3. There is nothing wrong with the sample.
4. A constructor needs to be added to class "Derived".
5. A pointer to a base class cannot point to an instance of a derived class.
Ошибка в том, что в данном контексте нельзя преобразовать значение типа Derived* в значение типа Base*.
Поэтому, выбираем ответ 2. Но он, мне кажется как-то криво сформулирован: "pb" не может быть откасчено из Derived в Base.
Но ведь pb никто никуда не кастит. Это просто переменная типа Base*. Ей пытаются присвоить значение типа Derived*, и это значение (а не переменную pb) нужно откастить в Base*, чтобы присвоить его переменной pb.
Еще у меня вызывал подозрения ответ 5. Указатель на базовый класс не может указывать на экземпляр класса потомка. Что имеется в виду? Вообще-то может указывать. Ну ладно, не на объект потомка, а на его базовый подобъект. Или все-таки не может?
Допустим, решили, что может указывать. Но, в данном контексте указатель на базовый класс не сможет получить значение указателя на объект класса-потомка. Но в другом контексте, например, в определении деструктора ~Derived()-сможет. Или если наследование будет public — то тоже сможет. Или, например, добавили в Derived функцию
class Derived: protected Base {
...
public:
Base* GetBase() { return this; }
...
};
тогда можно будет сделать так:
Derived *pd=new Derived;
Base *pb=pd->GetBase();
И вот, pb хранит указатель на объект класса Derived.
В общем, 5-ый ответ, видимо, неправильный, но за уши его тоже можно притянуть.
============================================== Вопрос 5.
class Base {
public:
Base();
~Base();
int GetBaseNum();
private:
int baseNum;
};
class A: public Base {
public:
A();
~A();
float GetBaseNum();
private:
float baseNum;
};
What concept is represented by the sample code above?
1. Polymorphism
2. Virtual Function
3. Recursion
4. Inheritance
5. Function overloading
Варианты 1, 2, 3 отметаем сразу.
Вариант 4-наследование? Да, оно, конечно, здесь присутствует, но это нельзя назваь примером правильного использования наследования. Какой смысл открыто наследоваться от класса Base и скрывать единственную имеющуюся у него функцию GetBaseNum()? Лучше сделать Base закрытым членом (или закрытым предком, если так уж хочется применить наследование) класса A?
Вариант 5 может показаться правильным, но нет. Это все же не перегрузка.
Цитата из стандарта:
13.2 Declaration matching
...
class B {
public:
int f(int);
};
class D : public B {
public:
int f(char*);
};
Here D::f(char*) hides B::f(int) rather than overloading it.
Здравствуйте, Atminav, Вы писали:
A>1. Polymorphism A>2. Inheritance (ответ на вопрос 2) A>3. ??? A>4. Data abstraction (ответ на вопрос 1) A>5. Encapsulation
A>Насчет 3 — не могу сообразить. Остальное правильно?
Ну... типа... создание объектов на основе одного типа.
A>============================================== A>
A>Referring to the above sample code, which one of the following statements is true?
A>1. Sizeof(myclass) is 0.
A>2. MyClass will not have a vtable.
A>3. Void is an illegal constructor argument type.
A>4. The assignment operation is invalid.
A>5. MyClass is declared incorrectly.
A>
A>---------- A>Итак, мой ответ — 5 (отсутствие ";"), но он мне не нравится. Может, ответ все-таки другой, а я его в упор не вижу?\
А мне нравится, причем что может быть не так в операторе присваивания, если он даже не объявлен?
A>============================================== A>Вопрос 4.
Много букв, не читал... Извините...
A>============================================== A>Вопрос 5.
A>
A>class Base {
A>public:
A> Base();
A> ~Base();
A> int GetBaseNum();
A>private:
A> int baseNum;
A>};
A>class A: public Base {
A>public:
A> A();
A> ~A();
A> float GetBaseNum();
A>private:
A> float baseNum;
A>};
A>
A>
A>What concept is represented by the sample code above?
A>1. Polymorphism
A>2. Virtual Function
A>3. Recursion
A>4. Inheritance
A>5. Function overloading
A>
A>Варианты 1, 2, 3 отметаем сразу. A>Вариант 4-наследование? Да, оно, конечно, здесь присутствует, но это нельзя назваь примером правильного использования наследования. Какой смысл открыто наследоваться от класса Base и скрывать единственную имеющуюся у него функцию GetBaseNum()? Лучше сделать Base закрытым членом (или закрытым предком, если так уж хочется применить наследование) класса A?
Так про правильность и не спрашивают... Короче 4. Наследование.
A>Вариант 5 может показаться правильным, но нет. Это все же не перегрузка.
Да почему он может показаться правильным?????