2016-12-21 3 views
2

Следующий вопрос является частью теста C++ для Upwork.Неверный ответ для Upwork C++ Test

class A { 
    typedef int I; // private member 
    I f(); 
    friend I g(I); 
    static I x; 
}; 

, какие из следующих справедливы:

1) A::I A::f() { return 0; }

2) A::I g(A::I p = A::x);

3) A::I g(A::I p) { return 0; }

4) A::I A::x = 0;

Мне кажется, что все ответы действительны. Я тестировал их, и они отлично работают!

Я прав? или я чего-то не хватает?

+2

Я добавил точку с запятой после 'typedef': я не думаю, что вопрос об этом. – Bathsheba

ответ

4

Способ, которым это написано, все 4 действительны.

  1. Это тривиально; это определение функции-члена класса.

  2. Это прототип функции для функции g. Требуется объявление friend, которое у вас есть. В противном случае ни I, ни значение по умолчанию x не доступны функции g.

  3. Это определение функции g. Требуется объявление friend, которое у вас есть, иначе I недоступен функции g.

  4. Это тривиально; это определение члена staticx.