You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.2 KiB
103 lines
2.2 KiB
# Example of object function overriding and calling
|
|
# This is quite intricated...try to get out of this
|
|
# by examining the code.
|
|
|
|
class (A,object)
|
|
{
|
|
# The base class at all
|
|
# Implements $A::function and $A::virtual
|
|
function
|
|
{
|
|
echo -i=10 "$0\Entering A::function()"
|
|
$$->$virtual("----$0")
|
|
echo -i=10 "$0\Exiting A::function()"
|
|
}
|
|
virtual
|
|
{
|
|
echo -i=10 "$0\This is A::virtual()"
|
|
}
|
|
}
|
|
|
|
class (B,A)
|
|
{
|
|
# Derived from A : inherits $A::function()
|
|
# overrides $A::virtual
|
|
virtual
|
|
{
|
|
echo -i=20 "$0\Entering B::virtual()"
|
|
$$->$A::virtual("----$0")
|
|
echo -i=20 "$0\Exiting B::virtual()"
|
|
}
|
|
}
|
|
|
|
class (C,B)
|
|
{
|
|
# Derived from B : inherits $B::virtual and
|
|
# overrides $B::function (that is $A::function)
|
|
function
|
|
{
|
|
echo -i=30 "$0\This is C::function"
|
|
}
|
|
}
|
|
|
|
echo -i=7 "Ok...now try to gusess what's going on :)"
|
|
|
|
%o = $new(C,0,test)
|
|
|
|
echo "# Calling \%o->\$function"
|
|
%o->$function
|
|
echo "# Calling \%o->\$C::function"
|
|
%o->$C::function
|
|
echo "# Calling \%o->\$B::function"
|
|
%o->$B::function
|
|
echo "# Calling \%o->\$A::function"
|
|
%o->$A::function
|
|
echo "# Implementing private \%o->\$function"
|
|
privateimpl(%o,function)
|
|
{
|
|
# This is a private implementation that
|
|
# overrides $C::function
|
|
echo "$0\Entering \$\$::function"
|
|
$$->$C::function("----$0");
|
|
echo "$0\Exiting \$\$::function"
|
|
}
|
|
|
|
echo "# Calling \%o->\$function"
|
|
%o->$function
|
|
echo "# Calling \%o->\$C::function"
|
|
%o->$C::function
|
|
echo "# Calling \%o->\$B::function"
|
|
%o->$B::function
|
|
echo "# Calling \%o->\$A::function"
|
|
%o->$A::function
|
|
echo "# Implementing private \%o->\$virtual"
|
|
privateimpl(%o,virtual)
|
|
{
|
|
# This is a private implementation that
|
|
# overrides $C::virtual (that is $B::virtual in fact)
|
|
echo "$0\Entering \$\$::virtual"
|
|
$$->$C::virtual("----$0")
|
|
echo "$0\Exiting \$\$::virtual"
|
|
}
|
|
|
|
echo "# Calling \%o->\$function"
|
|
%o->$function
|
|
echo "# Calling \%o->\$C::function"
|
|
%o->$C::function
|
|
echo "# Calling \%o->\$B::function"
|
|
%o->$B::function
|
|
echo "# Calling \%o->\$A::function"
|
|
%o->$A::function
|
|
echo "# Removing private \%o->\$function"
|
|
privateimpl(%o,function){}
|
|
echo "# Calling \%o->\$function"
|
|
%o->$function
|
|
echo "# Calling \%o->\$C::function"
|
|
%o->$C::function
|
|
echo "# Calling \%o->\$B::function"
|
|
%o->$B::function
|
|
echo "# Calling \%o->\$A::function"
|
|
%o->$A::function
|
|
|
|
delete %o
|