Size: a a a

2021 February 24

D

Dmitriy in supapro.cxx
источник

TW

Tony Werner in supapro.cxx
Антивирус в помощь
источник

C

Chuvi in supapro.cxx
нужна дефенестрация
источник

СК

Сергей Казьмин... in supapro.cxx
Nastya Medveda
Мне понятно когда нужен полиморфизм, но тут поведение зависит от указателей, а я не очень поинмаю когда это применяется.
Если я использую  MyExtendedClass  унаследованный от BaseClass, то я не встречусь с указателем на базовый класс соответственно и virtual не будет нужен.
Например, у тебя есть вектор указателей на базовый класс, к которой ты хочешь применить один и тот же метод в цикле, но при этом тебя не очень волнует, какие конкретно сущности там представлены. Для наглядности, пусть у тебя будет базовый класс Employee - сотрудник фирмы. От него унаследуются Manager, Programmer, ... . Допустим, ты хочешь, чтобы у каждого сотрудника вызвался метод индексация зарплаты. Примерно так это будет выглядеть.
Ты изначально проектируешь иерархию наследования с целью добиться одинакового интерфейса у схожих сущностей.

class Employee
{
   virtual void RaiseSalary()
   {
       /// some logic
   }
};

class Manager : public Employee
{
   virtual void RaiseSalary() override
   {
       /// немного отличная логика, например, повышение с коэффициентом
   }
};

class Programmer : public Employee
{
   virtual void RaiseSalary() override
   {
       /// немного отличная логика, например, повышение с коэффициентом
   }
};

std::vector<Employee*> staff;
for (Employee* employee : staff)
{
 employee->RaiseSalary();
}



Может поможет осознать :)
источник

TW

Tony Werner in supapro.cxx
Значит переустанавливай шиндлвс или чо там у вас)
источник

C

Chuvi in supapro.cxx
источник

m

mixa secret in supapro.cxx
у вас IQ зашкаливает))
источник

IZ

Ilia Zviagin in supapro.cxx
Alex Green 𓆏
Доброго вечера. Я недавно слышал где-то, что в новых стандартах строку можно передавать в функцию по значению, а не ссылке (как пишут в типичных книгах С++ для новичков). Так как компилятор применит оптимизацию и передадутся просто указатели на строку. Так ли это?
Это под move semantics ...
источник

NM

Nastya Medveda in supapro.cxx
Сергей Казьмин
Например, у тебя есть вектор указателей на базовый класс, к которой ты хочешь применить один и тот же метод в цикле, но при этом тебя не очень волнует, какие конкретно сущности там представлены. Для наглядности, пусть у тебя будет базовый класс Employee - сотрудник фирмы. От него унаследуются Manager, Programmer, ... . Допустим, ты хочешь, чтобы у каждого сотрудника вызвался метод индексация зарплаты. Примерно так это будет выглядеть.
Ты изначально проектируешь иерархию наследования с целью добиться одинакового интерфейса у схожих сущностей.

class Employee
{
   virtual void RaiseSalary()
   {
       /// some logic
   }
};

class Manager : public Employee
{
   virtual void RaiseSalary() override
   {
       /// немного отличная логика, например, повышение с коэффициентом
   }
};

class Programmer : public Employee
{
   virtual void RaiseSalary() override
   {
       /// немного отличная логика, например, повышение с коэффициентом
   }
};

std::vector<Employee*> staff;
for (Employee* employee : staff)
{
 employee->RaiseSalary();
}



Может поможет осознать :)
Спасибо! Теперь стало понятно! Это сильно лучше чем все, что я нашла в гугле (там один и тот же пример в разных статьях). Вам стоит подумать чтоб написать об этом книгу 🙂
источник

СК

Сергей Казьмин... in supapro.cxx
Думаю, вы искали что то не то просто :)
источник

IZ

Ilia Zviagin in supapro.cxx
Скрыто
Всех приветствую. Есть ли у кого кастомная реализация new\delete с помощью которой можно выделять классы в том числе?
Побрей ник плиз...
источник

NM

Nastya Medveda in supapro.cxx
Сергей Казьмин
Думаю, вы искали что то не то просто :)
Посмотрела в паре книг на oreily и  чего вылезло в гугле по запросу dynamic polymorphism in c++
там везде в примерах
Child* c= new Child()
, который внезапно заменяется на
Base *b = new Child()
без объяснения причин. (и вариации кода с той же самой заменой)
источник

IZ

Ilia Zviagin in supapro.cxx
Nastya Medveda
Посмотрела в паре книг на oreily и  чего вылезло в гугле по запросу dynamic polymorphism in c++
там везде в примерах
Child* c= new Child()
, который внезапно заменяется на
Base *b = new Child()
без объяснения причин. (и вариации кода с той же самой заменой)
Вроде и так всё понятно...
источник

IZ

Ilia Zviagin in supapro.cxx
Nastya Medveda
Посмотрела в паре книг на oreily и  чего вылезло в гугле по запросу dynamic polymorphism in c++
там везде в примерах
Child* c= new Child()
, который внезапно заменяется на
Base *b = new Child()
без объяснения причин. (и вариации кода с той же самой заменой)
На самом деле примеров дофига, хотя бы с той же очень знаменитой иерархией геометрических фигур с методом Draw()
источник

NM

Nastya Medveda in supapro.cxx
Ilia Zviagin
Вроде и так всё понятно...
Непонятно, потому что здесь динамический полиморфизм (не рассматриваемый в языках с динамическими типами типа питона) наслаивается на указатели (тоже довольно специфичные для С/С++)
источник

m

mixa secret in supapro.cxx
Ilia Zviagin
На самом деле примеров дофига, хотя бы с той же очень знаменитой иерархией геометрических фигур с методом Draw()
Например в SFML
источник

IZ

Ilia Zviagin in supapro.cxx
Nastya Medveda
Непонятно, потому что здесь динамический полиморфизм (не рассматриваемый в языках с динамическими типами типа питона) наслаивается на указатели (тоже довольно специфичные для С/С++)
Наоборот, в дин. языках только динамический полиморфизм и есть.
ИМЕННО ПОЭТОМУ другой не рассматривается.
источник

NM

Nastya Medveda in supapro.cxx
Ilia Zviagin
Наоборот, в дин. языках только динамический полиморфизм и есть.
ИМЕННО ПОЭТОМУ другой не рассматривается.
я не настоящий программист
источник

NM

Nastya Medveda in supapro.cxx
mixa secret
Например в SFML
Мне в SFML лезть до того как я книжку C++ for absolute beginners дочитаю или лучше после?
источник
2021 February 25

IZ

Ilia Zviagin in supapro.cxx
после
источник