CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Lua ООП конспект

    Запланировано Прикреплена Закрыта Перенесена Справочники
    ce luaoop
    1 Сообщения 1 Posters 33 Просмотры 1 Watching
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MasterGHM Не в сети
      MasterGH Администраторы
      отредактировано MasterGH

      Пригодится для создания больших плагинов в Cheat Engine. Более ~500 строк

      Наследование

      ClassX = {}
      
      	function ClassX:New(_argument1, _argument2)
      
      		local obj = {}
      		obj.argument1 = _argument1
      		obj.argument2 = _argument2
      
      		-- Через "self"
      		function obj:GetValue1() return obj.argument1 end
      		function obj:GetValue2() return obj.argument2 end
      
      		setmetatable(obj, self)
      		obj.__index = ClassX
      		return obj
      	end
      
      	someObject = ClassX:New("A", "B")
      	print(someObject.GetValue1())
      	print(someObject.GetValue2())
      
      
         	Woman = {}
      	--наследуемся
      	setmetatable(Woman ,{__index = ClassX})
      	--проверяем
      	masha = Woman:New("Марья","Ивановна")
      	print(masha:GetValue1())  --->результат: Марья
      

      Инкапсуляция

      Person = {}
      	function Person:new(name)
      		--приватное свойство
      		local private = {}
      		private.age = 18
      
      		local obj = {}
      		--публичное свойство
      		obj.name = name or "Вася"   -- "Вася" - это значение по умолчанию
      
      		function obj:getAge() return private.age end
      
      		setmetatable(obj,self)
      		self.__index = self
      		return obj
      	end
      
      	vasya = Person:new()
      	print(vasya.name)          --> результат: Вася
      	print(vasya.age)           --> результат: nil
      	print(vasya:getAge())     --> результат: 18
      

      Полиморфизм

      Person = {}
      	function Person:New(name)
      		local private = {}
      		private.age = 18
      
      		local obj = {}
      		obj.name = name or "Вася"
      		-- Защищенный от переорпеделения
      		function obj:GetName() return "Person protected "..self.name end
      		-- Переопределяемый
      		function Person:GetName2() return "Person "..self.name	end
      
      		setmetatable(obj, self)
      		self.__index = self
      		return obj
      	end
      
      	--создадим класс, унаследованный от Person
      	Woman = {}
      	setmetatable(Woman,{__index = Person})
      	function Woman:GetName() return "Woman protected "..self.name end
      	function Woman:GetName2() return "Woman "..self.name end
      
      	--проверим
      	masha = Woman:New()
      	print(masha:GetName())   --> Person protected Вася
      	print(masha:GetName2())  --> Woman Вася
      

      ref

      1 ответ Последний ответ Ответить Цитировать 0

      • 1 / 1
      • Первое сообщение
        Последнее сообщение
      Powered by NodeBB | Contributors
      СeLua[RU] 2025©