У них тест состоит из четырех простых вопросов
Первый вопрос
Перепишите код, устранив имеющиеся в нём проблемы, но не изменяя функцию main
class Foo { public: Foo(int j) { i=new int[j]; } ~Foo() { delete i; } private: int* i; }; class Bar: Foo { public: Bar(int j) { i=new char[j]; } ~Bar() { delete i; } private: char* i; }; void main() { Foo* f=new Foo(100); Foo* b=new Bar(200); *f=*b; delete f; delete b; }
Ответ на первый вопрос
Надо добавить конструктор по умолчанию, виртуальный деструктор, публичное наследование, длину массива и оператор присваивания.
class Foo { public: Foo() : i(0), len(-1) {} Foo(int j) { i=new int[j]; len = j;} virtual ~Foo() { //it works fine even if i==0 delete i; } Foo & operator = (const Foo & right) { delete i; //propably we need to implement some kind of reference counting //but I simply made a copy of the array if (right.i == 0) { i = 0; len = -1; } else { len = right.len; i = new int[len]; memcpy(i, right.i, len * sizeof(int)); } return *this; } private: int* i; int len; }; class Bar: public Foo { public: Bar(int j) { i=new char[j]; } ~Bar() { delete i; } private: char* i; }; void main() { Foo* f=new Foo(100); Foo* b=new Bar(200); *f=*b; delete f; delete b; }
Ответ на четвертый вопрос
std::wstring GetWindowTextW(HWND hWnd) { int len = GetWindowTextLength(hWnd); std::wstring s; s.reserve(len + 1); ::GetWindowTextW(hWnd, const_cast<wchar_t*>(s.c_str()), len); return s; }