Extending Types * 2
BlitzMax Forums/BlitzMax Beginners Area/Extending Types * 2
| ||
| Ok so Type A Extends B, C doesnt work Type A Extends B AND C doesnt work Type A Extends B Extends C doesnt work either Question: How do i extend 2 types? |
| ||
| e.g. Type Player Extends ActiveObject, Movement, Animation End Type |
| ||
| . |
| ||
| Cannot. Sorry. |
| ||
| Type A End Type Type B Extends A End Type Type C Extends B End Type |
| ||
| No multiple inheritance in BlitzMax. |
| ||
Workaround:Type A Field myB:B = New B Field myC:C = New C End type Local blah:A = New A A.myB.something() |
| ||
| @Czar: That has nothing to do with inheritance. Attempting to emulate multiple inheritance like that is quite nasty. |
| ||
| O_O it cant be done at all? o.o hmm.. i assume then there is no other way than to create multiple combinations of types and work with duplicate code :S Or you get (indeed) something like Type A End Type Type B Extends A End Type Type C Extends B End Type But isnt that slow? |
| ||
| But isnt that slow? Wouldn't multiple inheritance also be 'slow'? |
| ||
| i have no idea.. i assume it wouldve been faster as it would ve been designed for it but i guess you have a point. Question is tough, IS IT slow.. because if theres any barely any slowdown, then theres no problem with doing it that way. Otherwise im better off making individual Types anyway. |
| ||
| Your fussing over non-issues, the real slow-down is collision detection, mass mathematical calculations and graphics rendering. |
| ||
| Building the ideal Type tree is one of the fun things in programming. If you need multiple inheritance you're building a broken tree. The whole idea of inheritance is to give you a more centralized control over your objects. As much trouble as i have with timingcode and tweening, so easy comes OOP. Thanks for the timingcode you posted a few days ago, i'm using it myself now. |
| ||
| I agree very munch the implementation of Interface (like java) for support the pseudo-multiinherintance. The really multi-inheritance is error prone. Thanks, paposo |
| ||
| TStudentMusician inherits form both TStudent and TWorker The ideal way Type TStudentMusician Extends TStudent And TWorker The work-around way Type TStudentMusician Field s:TStudent = New TStudent Field w:TWorker = New TWorker Method getAge:Int() Return s.age End Method Method getHoursWorked:Int() Return w.hoursworked End Method End Type |
| ||
| It can help by thinking about the 'is a' and 'has a' relation. TStudentMusician .. is-a .. TStudent TStudentMusician .. has-a .. TJob So.. Type TStudent Field age% Method GetAge%() Return age End Method End Type Type TStudentMusician Extends TStudent Field job:TJob = new TJob Method GetHoursWorked%() Return job.GetHoursWorked() End Method End Type It helps you to solve the lack of multi-inheritance (which is not always the preferable OOP structure, after all) |
| ||
Sorry to hijack this thread but Im wondering using the above code - how do you reference the Extended type (tstudent) to be used with an function outside the type.
Type TStudent
Field age%
Method GetAge%()
Return age
End Method
End Type
Type TStudentMusician Extends TStudent
End Type
Type ITStudent Extends TStudent
End Type
'
'How can you reference the age field using a function ?
'
Local student1:TStudentMusician = New TStudentMusician
Local student2:ITStudent = New ITStudent
student1.age = 23
student1.age = 28
DebugLog( ShowAge(student1))
DebugLog( ShowAge(student2))
Function ShowAge:Int( studentdata:Object ) ' <<< how to pass
Return Studentdata.age
End Function
NO sooner I post then I find the answer
Return Tstudent(Studentdata).age
|
| ||
Using polymophinwhatitsface...Function ShowAge:Int(studentData:TStudent)
Return studentData.GetAge()
End Function |