База ответов ИНТУИТ

Программирование на С/С++

<<- Назад к вопросам

<pre> //====================== start of sample.cpp ========================== class ARef { public: ARef(A &amp;a, int i) : _a(a), _ix(i) {} ARef&amp; operator= (T t) { return *this;} operator T() {return _t;} operator A() {return _a;} A& getA() { return _a;} bool operator == (A&amp; a) {return _a == a;} private: A&amp; _a; int _ix; T _t; }; class A { friend class ARef; public: A() {} ARef operator[] (int ix) {return ARef(*this, ix);} operator ARef() {return ARef(*this, ix);} }; //====================== end of sample.cpp ========================== </pre> Какие из методов класса ARef из файла sample.cpp являются необходимыми для поддержки идиомы контекстно-зависимой перегрузки операции индексирования агрегата?

(Ответ считается верным, если отмечены все правильные варианты ответов.)

Варианты ответа
operator A();
operator= (T t);(Верный ответ)
bool operator == (A& a);
operator T();(Верный ответ)
A& getA();
Похожие вопросы
<pre> //====================== start of sample.cpp ========================== class ARef { public: ARef(A &amp;a, int i) : _a(a), _ix(i) {} ARef&amp; operator= (T t) { return *this;} operator T() {return _t;} operator A() {return _a;} A&amp; getA() { return _a;} bool operator == (A&amp; a) {return _a == a;} private: A&amp; _a; int _ix; T _t; }; class A { friend class ARef; public: A() {} ARef operator[] (int ix) {return ARef(*this, ix);} operator ARef() {return ARef(*this, ix);} }; int main() { A a; int i, j; T t; t = a[j]; return 0; } //====================== end of sample.cpp ========================== </pre> Какие из методов классов ARef и A из файла sample.cpp оказываются задействованы при операции t=a[j]?
<pre> //====================== start of sample.hpp ========================== class ARef { public: /* Сonstructory */ ARef(A&amp; a, int i) : _a(a), _ix(i) {} /* operator= */ ARef&amp; operator= (T t) { return *this;} private: A&amp; _a; // Reference to A object int _ix; // index in container }; class BRef { public: BRef(B &amp;b, int i) : _b(b), _ix(i) {} BRef&amp; operator= (T t) { return *this;} private: B&amp; _b; int _ix; }; /* * Class CRef имплементирует шаблон проектирования X * хранит в себе ссылку на коллекцию типа A, которая является коллекцией * объектов типа T и предоставляет к ним доступ */ class CRef { public: CRef(C &amp;c, int i) : _c(c), _ix(i) {} CRef&amp; operator= (T t) { return *this;} private: C&amp; _c; /* та коллекция объектов, доступ к которой и предоставляется*/ int _ix; /* индекс текущего объекта в контейнере */ }; /* * Class DRef */ class DRef { public: // конструктор инициализирует объект DRef(D &amp;d, int i) : m_d(d), _ix(i) {} // оператор возвращает ссылку на себя DRef&amp; operator= (T t) { return *this;} private: D&amp; m_d; // хранимый объект int _ix; // индекс }; //====================== end of sample.hpp ========================== </pre> Комментарии какого из классов в файле sample.hpp являются необходимыми и достаточными?
<pre>//====================== start of sample.cpp ========================== class Region; class Person { public: short m_age; const char* m_name; const char* m_surname; const char* m_region_name; Person(const char* name) : m_name(name) {} operator short () {return m_age;} operator const char* () {return &quot;&quot;;} operator Region* (); }; class Region { public: const char* region_name; const char* cheef_name; long size; Region(const char* region_nm) : region_name(region_nm) {} operator long () {return size;} operator const char* () {return region_name;} operator Person () {return Person(cheef_name);} }; Person::operator Region* () {return new Region(m_region_name);}//====================== end of sample.cpp ========================== </pre> Какие операторы преобразования класса Person не являются корректными с точки зрения архитектуры?
<pre>//====================== start of sample.cpp ========================== #include &lt;stdio.h&gt; class Region; class Person { public: short m_age; const char* m_name; const char* m_surname; const char* m_region_name; Person(const char* name) : m_name(name) {} operator short () {return m_age;} operator const char* () {return &quot;&quot;;} }; class Region { public: const char* region_name; const char* cheef_name; long size; Region(const char* region_nm = &quot;&quot;) : region_name(region_nm) {} operator long () {return size;} operator const char* () {return region_name;} }; int main() { Person p1(&quot;Vasily Ivanov&quot;); Region r; printf(&quot;Region number %u, driver %s&quot;, static_cast&lt;unsigned short&gt;(r), static_cast&lt;const char*&gt;(p1)); return 0; }//====================== end of sample.cpp ========================== </pre> Какие из имеющихся в файле sample.cpp конструкторов и операторов преобразования задействованы в операциях в функции main()?
<pre> //====================== start of sample.cpp ========================== #include &lt;iostream&gt; class Program; class ProgDataGetter { public: const char* prog_name(const Program&amp; prg); long get_version(const Program&amp; prg); }; class Program { long threads_count; double time_of_work; class Module { char* module_name; }; char* prog_name; long version; Module modules[16]; friend std::iostream&amp; operator &gt;&gt; (std::iostream&amp; io, Program&amp; prg); friend std::iostream&amp; operator &lt;&lt; (std::iostream&amp; io, const Program&amp; prg); friend class VersionGetter; friend const char* ProgDataGetter::prog_name(const Program&amp;); }; std::iostream&amp; operator &gt;&gt; (std::iostream&amp; io, Program&amp; prg) { io &gt;&gt; prg.prog_name &gt;&gt; prg.threads_count; } std::iostream& operator &lt;&lt; (std::iostream& io, const Program& prg) { io &lt;&lt; prg.prog_name &lt;&lt; prg.modules[0].module_name &lt;&lt; prg.modules[1].module_name; } class VersionGetter { public: long get_version(Program&amp; prg) { return prg.version; } }; const char* ProgDataGetter::prog_name(const Program&amp; prg) { return prg.prog_name; } long ProgDataGetter::get_version(const Program&amp; prg) { return prg.version;} //====================== end of sample.cpp ========================== </pre> Для каких функций и методов корректно организован доступ к членам класса Program файле sample.cpp?
<pre> //====================== start of sample.cpp ========================== template &lt;typename T&gt; class multiplies: public binary_function&lt;T,T,T&gt; { public: T operator() (const T&amp; x, const T&amp; y) const { return x * y; } }; //====================== end of sample.cpp ========================== </pre> Какие утверждения про приведённый выше код функтора multiplies верны?
<pre> //====================== start of sample.cpp ========================== struct A { A(); virtual ~A(); private: A(A&amp;a); A&amp; operator=(const A&amp; a); }; struct B: public A {}; struct C {}; struct D { D(); D&amp; operator=(const D&amp; d); }; //====================== end of sample.cpp ========================== </pre> Какие из типов из файла sample.cpp удовлетворяют требованию CopyConstructible?
<pre> //====================== start of sample.cpp ========================== int main(int argc, char* argv[]) { int a = 0; int b = 0; int X = 0; auto lf1 = [a,b,X] (int x) {return x > 0;}; auto lf2 = [a,b] (int x) { x++; return x;}; auto lf3 = [=] (int x) { x++; return x;}; auto lf4 = [&amp;] (int x) { x++; return x;}; auto lf5 = [] (bool&amp; z) { z = !z; return;}; return 0; } //====================== end of sample.cpp ========================== </pre> Какие лямбда функции из примера выше имеют доступ к значению переменной X?
<pre> //====================== start of sample.cpp ========================== int main(int argc, char* argv[]) { int a = 0; int b = 0; int X = 0; auto lf1 = [&amp;a,&amp;b,&amp;X] (int x) {return x &gt; 0;}; auto lf2 = [a,b] (int x) { x++; return x;}; auto lf3 = [=] (int x) { x++; return x;}; auto lf4 = [&amp;] (int x) { x++; return x;}; auto lf5 = [] (bool&amp; z) { z = !z; return;}; return 0; } //====================== end of sample.cpp ========================== </pre> Какие из приведённых в примере лямбда функций могут изменить значения переменных а и b?
<pre> //====================== start of sample.h ========================== int main(int argc, char* argv[]) { auto lf1 = [] (int x) {return x > 0;}; auto lf2 = [] (int x) -> bool {return x+1;}; auto lf3 = [] (int&amp; x) { x++; return;}; auto lf4 = [] (int x, int&amp; y) -> double {return x+y;}; auto lf5 = [] (bool&amp; z) { z = !z; return;}; return lf1(0); } //====================== end of sample.h ========================== </pre> Какие из приведённых выше лямбда функций возвращают тип bool?