Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
 Аватар для Drylozav
2 / 2 / 0
Регистрация: 03.02.2013
Сообщений: 34

Полиморфизм в Java

13.12.2013, 00:47. Показов 5651. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Изучая полиморфизм в Java натолкнулся на такой пример:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  class A {
    void m1(A a) {
        System.out.print("A");
    }
}
 
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
 
class C extends B {
    void m1(B c) {
        System.out.print("C");
    }
}
 
class D {
    public static void main(String[] args) {
        A c1 = new C();
        c1.m1(new B());
    }
}
И возник вопрос почему ответ в данной программе А ? Получается, что в данной строчке
Java
1
A c1 = new C();
происходит процесс полиморфизма и по правилам должен вызываться метод m1 класса С (который не переопределен , а перегружен и в качестве параметра принимает любую переменную типа В). Подскажите что в моих рассуждениях не так ? (Ведь ответ вроде должен быть С) И еще один пример :

Java
1
2
3
4
5
6
7
8
public void go() {
   А param = new A();
   Object obj = getObject(A);
}
 
  public Object getObject(Object o) {
   return o;
}
Скажите , почему если в строчке :
Java
1
Object obj = getObject(A);
Поменять Object на A, то произойдет ошибка ? Если параметр метода указан как Object, то при вызове функции getObject с аргументом A он будет приводиться к Object? Получается, что если возвращаемое значения метода указано как Object, то тип A будет приводиться к Object ? Если это так, то объясните пожалуйста как это происходит, а если нет, то скажите что происходит на самом деле ?

Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2013, 00:47
Ответы с готовыми решениями:

Java наследование и полиморфизм
Определить иерархию амуниции рыцаря. Экипировать рыцаря. посчитать стоимость амуниции. Провести сортировку амуниции по весу. Найти...

Подскажите пожалуйста, как ответить на вопрос про полиморфизм в JAVA в достаточном объеме для прохождения собеседования
Здравствуйте. Подскажите пожалуйста, как ответить на вопрос про полиморфизм в JAVA в достаточном объеме для прохождения собеседования....

Брюс Эккель Философия Java 2015. Полиморфизм
Здравствуйте уважаемые форумчане. В книге (страница 248) есть такой простенький пример кода: class Super { public int field = 0; ...

34
5 / 5 / 2
Регистрация: 12.11.2011
Сообщений: 70
14.04.2014, 15:24
Здравствуйте.Я тоже новичок. Давайте попробуем вместе разобраться.
По 1-му примеру так происходит потому, что:
1)т.к. метод m1(А а) в классе A принимает класс А и все его производные (в том числе класс B)
2)т.к. происходит восходящее преобразование к типу А, то про метод void m1(B b) из класса С он ничего не знает, перегрузки не происходит и выполняется пункт 1
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 16:17
Полиморфизм - это однообразная обработка разнотипных данных. Полиморфизм - непосредственная часть наследования, расширяющая возможности ООП. Теперь, чтобы разобраться с полиморфизмом, разберемся с наследованием.

Если один класс расширяет другой - он наследует все его доступные члены (методы/ПЭ). При создании объектов дочерних типов, вы как бы создаете еще и родительские объекты внутри дочернего. Можете представлять это как оболочки : создаем объект типа C, в нем создана оболочка (объект) типа B, в оболочке B создана оболочка A (дополнительно: каждый класс - наследник класса Object, поэтому во главе любой иерархии - класс Object).

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

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A {
    void m1(A a) {
        System.out.print("A");
    }
}
 
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
 
class D {
    public static void main(String[] args) {
        B b1 = new B();
        b1.m1(new B());
    }
}
Результат: B.

Полиморфные аргументы принимают все дочерние типы. Это вы усвоили. Но по вашему коду понятно, что вы не усвоили типизацию в Java. Давайте я объясню, что не так в вашем понимании.

Вы думаете, что создавая ссылку типа A (подразумевая полиморфное обобщение), и присваивая ей созданный объект дочернего типа C, вы сможете вызвать методы, которые описаны в классе C, но нет. Объявляя ссылку родительского типа - вы ограничиваете себя в списке возможных методов. Компилятор проверяет - какие методы есть в классе, типом которого является ссылка, а не объект. В классе A метод m1, принимая полиморфный аргумент, выводит в консоль "А", поэтому, создавая ссылку типа A, присваивая ей объект типа C, компилятор посмотрит в класс А - там есть метод m1, и он выполнит именно этот метод. Java всегда выбирает правильную версию!

Теперь покажу магию.

Ваш код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 class A {
    void m1(A a) {
        System.out.print("A");
    }
}
 
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
 
class C extends B {
    void m1(B c) {
        System.out.print("C");
    }
}
 
class D {
    public static void main(String[] args) {
        A c1 = new C();
        c1.m1(new B());
    }
}
Вы создали объект С, который в себе содержит объект B, содержащий объект А. То есть ссылка будет относиться к центральной оболочке. Но объект, тем не менее, не теряет своих свойств. И правила приведения типов работает даже для полиморфизма. Теперь, чтобы исправить проблему, просто приведем ссылку к такому же типу, что и объект. Вот исправленный код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class A {
    void m1(A a) {
        System.out.print("A");
    }
}
 
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
 
class C extends B {
    void m1(B c) {
        System.out.print("C");
    }
}
 
class D {
    public static void main(String[] args) {
        A c1 = new C();
        C c2 = (C) c1;
        c2.m1(new B());
    }
}
Добавлено через 13 минут
Второй пункт упустил. Но вы и сами разобрались.

Java
1
Object obj = getObject(A);
getObject() метод возвращает все, что в него положишь в тип Object. A - тип дочернего класса, относительно Object типа. А, как вам известно, реверсивного полиморфизма не существует, поэтому компилятор и ругается.

Добавлено через 17 минут
P.S. Такой вопрос - неужто в России так плохо с образованием, что профессора не могут объяснить учащимся о базовых вещах в ООП ?
0
5 / 5 / 2
Регистрация: 12.11.2011
Сообщений: 70
14.04.2014, 16:26
Если вы расширяете какой-либо класс, вы можете переопределить его методы, если нужно, конечно. Это работает так:
Код Java(TM) 2 Platform Standard Edition 5.0
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class A {
    void m1(A a) {
        System.out.print("A");
    }
}
 
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
 
class D {
    public static void main(String[] args) {
        B b1 = new B();
        b1.m1(new B());
    }
}
Результат: B.
А где тут переопределение?
1
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 16:37
А мне вообще не нравятся такие примеры
Сложно что-ли нормальные имена классам дать и объяснять по-человечески?
От всех этих A B C m1 foo bar и прочей, ничего не значащей, ерунды только кавардак в голове.
Назовите классы по-нормальному и сразу станет нагляднее и понятнее.
Образование - дело важное и тут лучше день потерять, а потом за пять минут долететь ))
Потому непонятно такое наплевательское отношение к названиям переменных в процессе обучения.

Добавлено через 8 минут
Да и вообще. Так ведь никто код не пишет. Зачем учить людей писать такую бессмысленную чушь?
А потом удивляемся, что не понимаем даже того, что сами писали месяц назад
1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 16:47
Цитата Сообщение от Dmitry Andreev Посмотреть сообщение
А где тут переопределение?
Java
1
2
3
4
5
class B extends A {
    void m1(B b) {
        System.out.print("B");
    }
}
Класс B переопределяет метод m1 класса A. Да, полиморфические аргументы используются разные, что схоже на перегрузку, но, тем не менее, в глазах компилятора и JVM - это переопределение. Ссылке типа B присваивается объект того же типа => метод будет вызываться, описанный в классе B. Если то же самое сделать, но тип ссылки указать A, например, то будем работать с методом класса A, но все тот же объект типа B спокойно передастся в аргумент.

Главное правило образования - от малого к великому. Причем образование должно строиться на минимуме "готовых" знаний. Я считаю, студенты должны сами черпать информацию, благо в нашем веке источников более, чем достаточно и доступ к ним есть у всех. А названия методов - кому как удобно.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 16:47
Давайте для примера переведём это на нормальный язык?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class BaseClass {
    void printClassName() {
        System.out.print("BaseClass");
    }
}
 
class ExstendedBaseClass extends BaseClass  {
    void printClassName() {
        System.out.print("ExtendedBaseClass");
    }
}
 
class MoreExtendedBaseClass extends ExstendedBaseClass  {
    void printClassName() {
        System.out.print("MoreExtendedBaseClass");
    }
}
 
class Test {
    public static void main(String[] args) {
        BaseClass c1 = new MoreExtendedBaseClass ();
        c1.printClassName();
    }
}
как вы наверное заметили, я убрал ненужные переменные из параметров функций.
теперь виден весь идиотизм этого примера?
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 16:50
Цитата Сообщение от UserAK Посмотреть сообщение
я убрал ненужные переменные из параметров функций.
Это не "ненужные переменные из параметров функций", а полиморфические аргументы, которые дают широкий спектр возможностей в использовании ООП.
Названия-то красивые, но главное понимать как это работает.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 17:04
Просто хотел сказать, что иногда проще сразу научить человека делать правильно, чем подставлять ему грабли вроде таких примеров и потом давать оплеухи за то, что он запутался в умело расставленных сетях. Проблема данного примера не в сложности, а в намерении запутать ученика. Не вижу в этом примере желания объяснить так, чтоб дошло. Короче некрасиво.

Добавлено через 2 минуты
да какраз таки это ненужные переменные. они не используются! это важнее чем потенциальная перегрузка.
Я об этом и говорю. Нормальные надо примеры делать, а не оторванные от реальности. ИМХО
1
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 17:07
Это уже вопрос об амбициях ученика. Меня никто не учил программированию. Я сам обложился книгами, статьями, туториалами и учусь, потому что это мне интересно. А если человеку дают знания, а он их не воспринимает - это говорит или о том, что ему плохо их преподносят, тогда единственный путь - самому изучить, или учащийся сам не хочет, подчеркну именно этот глагол, эти знания приобрести, тогда... думайте сами.

Добавлено через 2 минуты
Цитата Сообщение от UserAK Посмотреть сообщение
они не используются! это важнее чем потенциальная перегрузка.
Возможно, но суть была - показать на примере возможности полиморфизма, как я понял. И еще раз повторюсь, с точки зрения компилятора и JVM - это логическое переопределение.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 17:37
Мне кажется в любом обучении главное - цель. И очень важно, что бы обучение было интересным. Цель ученика это одно. А вот цель учителя - наверное в том, что бы объяснить человеку даже если он затупил, вывести его из тупняка и все равно объяснить.

Добавлено через 3 минуты
Да ещё. иногда можно посмотреть на проблему под разными углами. Можно переименовать переменные. Убрать неиспользуемые переменные. Вот если бы их нельзя было убрать, согласитесь, уже по другому смотрелось бы? Тогда надо было бы задуматься почему нельзя убрать. А полиморфизм это инструмент а не сама цель.

Добавлено через 3 минуты
Крестовой отвёрткой закручиваются шурупы с крестовой хреновиной на них там сверху. Но чтобы научиться их закручивать, надо брать и крутить, а не рассуждать о том, куда можно засунуть крестовую отвёртку.

Добавлено через 12 минут
Хорошо ладно
В данном примере все равно вызывается метод того класса, который был создан. Разве имеет смысл тип параметра?

Добавлено через 5 минут
Надеюсь теперь понятно почему эти переменные ненужны и сути они не меняют?
Ну согласитесь, эти переменные созданы просто чтобы запутать.
0
5 / 5 / 2
Регистрация: 12.11.2011
Сообщений: 70
14.04.2014, 17:45
Термин переопределение метода означает замещение версии метода, объявленной в базовом классе, новой, с точно такой же сигнатурой. Здесь нет переопределения.
void m1(B b) и void m1(A a) разная сигнатура.
Перегрузка будет в том случае если эти два метода будут в одном классе, потому что у них разная сигнатура.
1
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 17:50
Короче. Если мы будем вызывать функции разных классов с одним и тем же названием - вот это будет полиморфизм. А вызывать одну и ту же функцию одного и того же класса с разными параметрами и надеяться, что она как-то превратится в функцию другого класса из-за параметров это не полиморфизм, а идиотизм.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 18:11
Цитата Сообщение от Dmitry Andreev Посмотреть сообщение
void m1(B b) и void m1(A a) разная сигнатура.
Кажется, мне точно нужно купить очки. Почему-то думал, что там один тип полиморфического аргумента. Да, это не переопределение. Прошу прощения, если запутал.

В любом случае, то, что я расписал в посте на 1 странице - работает в целом для ООП. Главное запомнить, что если вы используете ссылку родительского типа и присваиваете ей объект дочернего типа, вы будете ограничены доступными членами только родительского класса (ну и его родителей, если это имеет место быть).

Цитата Сообщение от UserAK Посмотреть сообщение
Надеюсь теперь понятно почему эти переменные ненужны и сути они не меняют?
Ну согласитесь, эти переменные созданы просто чтобы запутать.
Честно говоря, они меня не сильно и волновали. Главное, чтобы это не учило программировать через левое плечо, стоя на голове.

Добавлено через 10 минут
Цитата Сообщение от UserAK Посмотреть сообщение
Если мы будем вызывать функции разных классов с одним и тем же названием - вот это будет полиморфизм.
Вы не правы. Вот пример, исходя из вашей логики:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Animal {
    void exist() {
        // something
    }
}
 
class Car {
    void exist() {
        // something
    }
}
 
class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Car car = new Car();
        
        animal.exist();
        car.exist();
    }
}
И это - не полиморфизм.

Еще раз повторюсь. Полиморфизм - однообразная (единообразная) обработка разнотипных данных. Проявляется в полиморфных типах возвращаемого значения, а также в полиморфных аргументах. Теперь приведу пример полиморфизма:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Animal {
    void getName(Animal animal) {
        System.out.println(animal.getClass().getName());
    }
}
 
class Dog extends Animal {
    // methods, vars
}
 
class Lion extends Animal {
    // methods, vars
}
 
class Test {
    public static void main(String[] args) {
        Animal animal = new Animal();
 
        animal.getName(new Dog());
        animal.getName(new Lion());
    }
}
Прелесть заключается в том, что мы можем использовать в кач-ве ВЗ или аргумента - любой тип, входящий в иерархию наследования данного родительского типа.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 18:19
Омг )) Можно назоздавать хоть стопитсот классов с разными или одинаковыми сигнатурами методов. Вызываем мы метод, принадлежащий экземпляру того класса, чей метод мы вызываем. Ну где тут полиморфизм? Или это какой то межклассовый полиморфизм? Не жирно будет чтоб ещё компилятор использовал какой-то левый код? ха ха ну зачем тогда вообще программировать? Что-то написал и компилятор сам порыскает по библиотекам и чёнить исполнит )) а мы посмеёмся )

Добавлено через 6 минут
Цитата Сообщение от Freedomen Посмотреть сообщение
Вы не правы. Вот пример, исходя из вашей логики:
Очень приятно, что вы считаете меня идиотом. А я то - дурак думал мы уже рассуждаем в области наследования. И нет необходимости повторять, что имею ввиду методы с одинаковыми названиями в пределах иерархии. Ок вы можете и дальше ловить меня на ошибках в пунктуации или ещё на каких-то мелочах. Я просто пытался объяснить суть.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 18:23
Полагаю, агрессия на мое замечание? Давайте вам объясню, и даже покажу, где тут полиморфизм.

Java
1
2
3
4
5
class Animal {
    void getName(Animal animal) {
        System.out.println(animal.getClass().getName());
    }
}
Метод getName() принимает полиморфный аргумент (то есть все типы, расширяющие тип Animal, могут быть переданы в аргумент данного метода). Далее просто печатает имя класса в консоли.

Классы Dog и Lion - дочерние для Animal => они могут быть переданы в аргумент метода getName().

В классе Test с главным методом я показал, как это работает.

Вот вам полиморфизм.

Цитата Сообщение от UserAK Посмотреть сообщение
Не жирно будет чтоб ещё компилятор использовал какой-то левый код? ха ха ну зачем тогда вообще программировать? Что-то написал и компилятор сам порыскает по библиотекам и чёнить исполнит ))
Этот комментарий лишен базы аргументов. Я привел лишь наглядный пример, чтобы разобрать - что есть полиморфизм. Вы же накинулись на меня, из-за того, что я показал вам вашу же ошибку.

Добавлено через 1 минуту
Цитата Сообщение от UserAK Посмотреть сообщение
Очень приятно, что вы считаете меня идиотом. А я то - дурак думал мы уже рассуждаем в области наследования. И нет необходимости повторять, что имею ввиду методы с одинаковыми названиями в пределах иерархии. Ок вы можете и дальше ловить меня на ошибках в пунктуации или ещё на каких-то мелочах. Я просто пытался объяснить суть.
Ни в коем случае я не пытался ничего этим сказать. Просто не хочется вводить в заблуждение новичков. Вы, скорее всего, понимаете на практике, что есть полиморфизм, как и где его использовать. Но в теории звучало некорректно, на что я и обратил внимание.
1
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 18:35
И вовсе я не накидывался. Извините у меня в голове наверное бардак. Если я вижу вызов функции конкретного класса то предполагаю, что будет вызвана именно функция того класса, чей метод я использую, а не какая-то функция дочернего или родительского класса. Да, сначала надо привести аргументы к типу вызываемой функции. Но лучше пусть мне компилятор напишет, что я неправильно вызываю, чем он исполнит что-то из вообще другого кода.

Добавлено через 5 минут
Извините если нагрубил. Может просто С++ не так преподносит полиморфизм и в Java есть вещи, которых я пока не понимаю. Но вроде всё то же самое и приоритет вызовов такой же.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 18:37
У каждого свой индивидуальный стиль программирования. Программирование является утилитой для реализации моих идей. И, в первую очередь, я абстрактно размышляю - как это должно работать в теории, а потом на практике. Если вам угодно напрямую контактировать с компилятором - дело ваше. В любом случае, лучше модераторам тему почистить, а то мы своими беседами могли увести новичков в ненужную область понимания.
0
73 / 73 / 13
Регистрация: 25.12.2012
Сообщений: 189
Записей в блоге: 2
14.04.2014, 18:44
Да ещё. Спасибо вам за пример с животными. Лучше такие примеры, чем всякие непонятные A B C классы. Надеюсь вы поделитесь опытом с новичками, без всяких заумных извращений типа первого примера в этом топике
На мой взгляд это пример того как не надо преподавать информацию. И собственно только это я и хотел сказать изначально.

Добавлено через 3 минуты
Цитата Сообщение от Freedomen Посмотреть сообщение
Если вам угодно напрямую контактировать с компилятором - дело ваше
Ну где я делал упор на компилятор? Это же просто к слову. Зачем вы меня хотите обидеть? Я даже вам плюсик поставил и спасибо за диалог.
0
61 / 61 / 19
Регистрация: 06.09.2013
Сообщений: 236
Записей в блоге: 1
14.04.2014, 18:48
Сложно не согласиться. Обычно программисты, которые хорошо понимают материал, показывают на пальцах вроде этих же A B C классов, зачем оригинальные названия, мы же программисты. xD
Хотя программирование - самая большая область из всех существующих. Это все, что может представить и далее смоделировать человек. Сознание не ограничено, так же как и наши возможности. Главное это понять.

Добавлено через 2 минуты
Цитата Сообщение от UserAK Посмотреть сообщение
Ну где я делал упор на компилятор? Это же просто к слову. Зачем вы меня хотите обидеть? Я даже вам плюсик поставил и спасибо за диалог.
Это не в обиду сказано. Все мы любим с компилятором общаться, когда дело доходит до высокоуровневых проектов и сжатых сроков. И вам спасибо за диалог, обычно местные попросят решения - поставят плюс и на этом все общение кончается...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2014, 18:48
Помогаю со студенческими работами здесь

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position at java.desktop/java.awt.Cont
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class...

Полиморфизм
Помогите сделать в коде полиморфизм. Тему особо не понимаю Если что, базовый класс - "Страна" и "Представитель"....

Полиморфизм
Очень нужна помощь, запутался. Есть студент и студент-контрактник. При выводе информации у меня стипендия всегда = 0. У...

Полиморфизм
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с местоположением . Определить наследуемые классы -...

Полиморфизм
Прочитал в Википедии что такое полиморфизм: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru