43 lines
855 B
Fortran
43 lines
855 B
Fortran
module cg
|
|
implicit none
|
|
|
|
type, abstract :: eatable
|
|
end type eatable
|
|
|
|
type, extends(eatable) :: carrot_t
|
|
end type carrot_t
|
|
|
|
type :: brick_t; end type brick_t
|
|
|
|
type :: foodbox
|
|
class(eatable), allocatable :: food
|
|
contains
|
|
procedure, public :: add_item => add_item_fb
|
|
end type foodbox
|
|
|
|
contains
|
|
|
|
subroutine add_item_fb(this, f)
|
|
class(foodbox), intent(inout) :: this
|
|
class(eatable), intent(in) :: f
|
|
allocate(this%food, source=f)
|
|
end subroutine add_item_fb
|
|
end module cg
|
|
|
|
|
|
program con_gen
|
|
use cg
|
|
implicit none
|
|
|
|
type(carrot_t) :: carrot
|
|
type(brick_t) :: brick
|
|
type(foodbox) :: fbox
|
|
|
|
! Put a carrot into the foodbox
|
|
call fbox%add_item(carrot)
|
|
|
|
! Try to put a brick in - results in a compiler error
|
|
call fbox%add_item(brick)
|
|
|
|
end program con_gen
|