Kishor-KW Ответов: 3

Что нужно виртуальному (виртуальное ключевое слово или виртуальная функция). Вместо привязки времени выполнения в oops


Как я знаю, что использование переопределения, что я могу использовать ту же функцию имени с тем же параметром, объявленным в классе bas в классе drived. что в нем действительно нужно?

Что я уже пробовал:

класс а
{
общедоступный виртуальный недействительным добавить()
{

}
}
класс B: A
общественного переопределить недействительными добавить()
{

}

что такое использование привязки времени выполнения. это увеличило сложность понимания того, что еще я могу сделать с другим именем.

в чем его преимущества и недостатки?

Kishor-KW

да, теперь мне все ясно. у меня есть такой же вопрос для виртуальной функции. какая в нем нужда. а не привязка во время выполнения? должен ли я опубликовать новый вопрос для этого?

Philippe Mori

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

То, что вы делаете, - очень плохая идея, так как кто-то, у кого есть подобный вопрос и кто использует Google, может найти вопрос, ответ на который, по-видимому, не связан с этим вопросом.

Даже хуже того, сделав это, вы можете заставить других людей ответить отрицательно. Таким образом, это полное отсутствие уважения к другим людям.

Это оскорбительно.

3 Ответов

Рейтинг:
1

OriginalGriff

Почему наличие AddInt, AddFloat, AddDouble, AddDecimal, AddByte, AddBigInt имеет "большую читабельность", чем наличие одного имени метода, который выполняет одну и ту же работу независимо от типов параметров?

Есть ли у вас отдельные тесты по вождению в вашей стране: DrivingTestFordEscort, DrivingTestFordKa, DrivingTestMercedesAClass, DrivingTestMercedesBClass,...?
Или у вас есть один тест на вождение, который позволяет вам управлять целым классом подобных транспортных средств?

Перегрузка позволяет сосредоточиться на том, что происходит, не сосредотачиваясь на деталях, а также улучшает читабельность и ремонтопригодность: если вы пишете свой код таким образом:

for (int i = 0; i < 10; i++)
   {
   for (int j = 0, j < 10; j++)
      {
      Console.WriteLine(Add(i, j));
      }
   }
А потом решите, что вам нужны двойники, это просто:
for (double i = 0; i < 10; i++)
   {
   for (double j = 0, j < 10; j++)
      {
      Console.WriteLine(Add(i, j));
      }
   }
Поскольку перегрузка позволяет использовать "ту же функциональность" без необходимости находить все экземпляры AddInt и заменять их AddDouble - система сортирует, какая перегрузка подходит. Это тривиальный пример, но если вы пропустите одну замену в сложном фрагменте кода, Вы введете ошибку, потому что система сделает некоторые приведения для вас, и вы получите "неправильный" результат: целочисленное деление очень отличается от плавающей точки!

Кроме того, ваш пример также тривиален: это нормально, когда вам нужно только два целых числа или два двойника, но вот один из моих перегруженных методов:
public Video Create(string title)
public Video Create(string title, bool temporary)
public Video Create(string title, DateTime productionDate)
public Video Create(Guid id, string title, DateTime productionDate, DateTime         
public Video Create(Guid id, string title, DateTime productionDate, DateTime insertDate, bool complete, bool offline = false, bool deleted = false)
public Video Create(Guid id, string title, DateTime productionDate, DateTime insertDate, bool complete, int playCount, bool offline = false, bool deleted = false)

Какие имена вы им дадите и как вы их запомните?


Рейтинг:
0

King Fisher

Прочитав эти ответы, вы получите ясное представление.
В чем преимущество перегрузки метода в концепции OOPS[^]


Kishor-KW

да, теперь мне все ясно. у меня есть такой же вопрос для виртуальной функции. какая в нем нужда. а не привязка во время выполнения? должен ли я опубликовать новый вопрос для этого?

King Fisher

отредактируйте свой вопрос .

Kishor-KW

ладно

Kishor-KW

я отредактировал свой вопрос. пожалуйста, ответьте

King Fisher

почему вы удалили свой старый вопрос, вы должны добавить второй вопрос ниже вашего 1-го вопроса. его швы, на которые мы ответили, не имеют отношения к вашему вопросу прямо сейчас.

Рейтинг:
0

CPallini

Цитата:
он перегружен, но что толку от него? в смысле повторного использования, читабельности ? что именно это дает мне преимущество?
Пример альтернативного подхода: GLAPI/glVertexAttrib - OpenGL.org[^].