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.
kvirc/doc/scriptexamples/class1.kvs

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