How can I create an inherit class based on variable value?
    5 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Chung-Tao Chou
 el 20 de Feb. de 2023
  
Hi,
I've defined multiple classes (class1, class2, class3...) which all inherit from one class (class0): 
classdef class0 ...
classdef class1 < class0 ...
classdef class2 < class0 ...
classdef class3 < class0 ...
and I have a variable 'index', which is 1 or 2 or 3. I'm trying to create a object whose class type is based on this index. For example, if index is 1, I want a object of class1. So far I can acheive this by calling a function like in the following code:
function test = create_class_obj(index)
    switch index
        case 1
            test = class1();
        case 2
            test = class2();
        case 3
            test = class3();
    end
end
Is there an elegant way to encode this into the constructor of class0? So that I can do the following:
test = class0(index);
Thanks.
Josh
0 comentarios
Respuesta aceptada
  Steven Lord
    
      
 el 20 de Feb. de 2023
        You could create a function handle to the constructor then call that function handle.
index = 2; % example
fh = str2func("class" + index)
fh()
You'd probably want to check (either before creating the function handle or while calling it, using try and catch) that the class you're trying to instantiate exists.
But I would not put this into the constructor of class0. I would instead make a factory function or method that creates the appropriate subclass object.
function class0()
disp("Inside class0")
end
function class1()
disp("Inside class1")
end
function class2()
disp("Inside class2")
end
function class3()
disp("Inside class3")
end
1 comentario
Más respuestas (1)
  chrisw23
      
 el 20 de Feb. de 2023
        
      Editada: chrisw23
      
 el 20 de Feb. de 2023
  
      classdef baseClass < handle
methods
   function baseClass(index)
     ...
   end
end
...
classdef class0 < baseClass
methods
  function class0(index)
       % explicitly call the superclass constructor with argument
       @obj.baseClass(index)
  end
...
0 comentarios
Ver también
Categorías
				Más información sobre Extend Testing Frameworks en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


