Переопределяющие общедоступные виртуальные функции с закрытыми функциями в C++

В приведенном выше фрагменте ваше globalVariables.tableData_Dashboard.all(by.tagName("tr")).count() возвращает обещание . Поэтому, когда вы добавляете их вместе, вы добавляете обещание для int и int. Следующая вещь, которая выглядит странно: var Button = 'globalVariables.Edit_Button_'+i; Это не оценивается как elementFinder. Я согласен с комментарием Йонга выше, где вы должны использовать globalVariables['Edit_Button_'+i];

Использование async / await

Так что я собираюсь ответить на этот вопрос с помощью async / await и поток управления отключен. Это с SELENIUM_PROMISE_MANAGER: false,, установленным в вашем файле конфигурации.

it('should show the same data in both Page' , async () => {

  const RowCount=  
(await globalVariables.tableData_Dashboard.all(by.tagName("tr")).count()) - 1;

  for (var i=1; i < RowCount; ++i){
    const button = globalVariables['Edit_Button_'+i];
    expect(await button.isDisplayed());

    // do something

  }
});

47
задан curiousguy 25 January 2016 в 23:57
поделиться

6 ответов

Проблема состоит в том, что Методы базового класса являются ее способом объявить ее интерфейс. Это, в сущности говоря, "Это вещи, которые можно сделать к объектам этого класса".

в Производном классе при создании чего-то, Основа объявила как частная общественность, Вы устраняете что-то. Теперь, даже при том, что Производный объект "-" Базовый объект, что-то, что необходимо смочь сделать к объекту Базового класса, который что Вы не можете сделать к объекту Производного класса, повредившись замена Prinicple

Liskov, это вызовет "техническую" проблему в Вашей программе? Возможно, нет. Но это будет, вероятно, означать, что объект Ваших классов не будет вести себя способом, Ваши пользователи ожидают, что они будут вести себя.

при нахождении в ситуации, где это - то, что Вы хотите (кроме случая устаревшего метода, упомянутого в другом ответе), возможности - Вы, имеют модель наследования, где наследование действительно не моделирует, "-", (например, Квадрат Scott Myers в качестве примера, наследовавшийся Прямоугольнику, но Вы не можете измениться, ширина Квадрата, независимая от ее высоты как Вы, может для прямоугольника), и Вы, возможно, должны пересмотреть свои отношения класса.

31
ответ дан JohnMcG 26 November 2019 в 19:41
поделиться

Вы действительно получаете неожиданный результат, что, если у Вас есть ребенок, Вы не можете назвать нечто, но можно бросить его к основе и затем назвать нечто.

child *c = new child();
c->foo; // compile error (can't access private member)
static_cast<base *>(c)->foo(); // this is fine, but still calls the implementation in child

я предполагаю, что Вы смогли изобретать пример, где Вы не хотите выставленной функции, кроме тех случаев, когда Вы рассматриваете его как экземпляр базового класса. Но самое то, что та ситуация открывается, предложило бы плохой дизайн OO где-нибудь вдоль строки, которая должна, вероятно, быть пересмотрена.

40
ответ дан Eclipse 26 November 2019 в 19:41
поделиться

Нет никакой технической проблемы, но Вы закончите с ситуацией, где общедоступные функции будут зависеть от того, есть ли у Вас основа или полученный указатель.

Это, по-моему, было бы странно и сбивало бы с толку.

6
ответ дан Andrew Grant 26 November 2019 в 19:41
поделиться

Может быть очень полезно, если Вы используете частное наследование - т.е. Вы хотите снова использовать (специализированную) функциональность базового класса, но не интерфейс.

4
ответ дан Nemanja Trifunovic 26 November 2019 в 19:41
поделиться

Это может быть сделано и достаточно редко приведет к преимуществам. Например, в нашей кодовой базе, мы пользуемся библиотекой, которая содержит класс с государственной функцией, которую мы раньше использовали, но теперь препятствовали использованию должных к другим потенциальным проблемам (существуют более безопасные методы для вызова). Мы также, оказывается, получаем класс из того класса, который много нашего кода использует непосредственно. Так, мы сделали заданную функцию частной в производном классе, чтобы помочь всем не забыть не использовать его, если они могут помочь ему. Это не устраняет способность использовать его, но это поймает некоторое использование, когда код попытается скомпилировать, а не позже в обзорах кода.

3
ответ дан Caleb Huitt - cjhuitt 26 November 2019 в 19:41
поделиться
  1. Никакая техническая проблема, если Вы подразумеваете технический как там являющийся скрытой стоимостью во время выполнения.
  2. при наследовании основы публично Вы не должны делать этого. Если Вы наследовались через защищенный или частное, то это может помочь предотвратить методы использования, которые не имеют смысла, если у Вас нет указателя базы.
1
ответ дан Tim Cooper 26 November 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: