digitalmars.D - gotcha 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, ...
- parabolis (43/43) Jan 07 2005 import std.stream;
import std.stream;
class MoreObjectionable : Objectionable {
override uint toHash() {
stdout.writeLine("gotcha! 3, 4, 5 ...");
return super.toHash();
}
override char[] toString() {
stdout.writeLine("gotcha! 2");
return super.toString() ~ "null ptr";
}
private:
int opEquals(Object o) {
stdout.writeLine("gotcha! 1");
return -1;
}
}
class Objectionable : Object {
alias MoreObjectionable.toHash toHash;
override char[] delegate() toString = null;
private:
int opEquals(Object o) {
stdout.writeLine("gotcha! 1");
return -1;
}
}
int main(char[][] args) {
int[MoreObjectionable] aa;
MoreObjectionable mo = new MoreObjectionable();
Object o = mo;
if( o == mo ) { args[0] = "once"; }
if( mo == o ) { args[0] = "twice"; }
// comment out toString() for endless loop
mo.toString();
aa[mo] = 1;
return 0;
}
/*
1) (cast(BaseClass)).function() != DerivedClass.function
2) toString() obliterated
3) Using 'alias' allows cyclic inheritance graphs
4) What's so great about acyclic inheritance graphs anyway?
5) goto 3)
*/
Jan 07 2005








parabolis <parabolis softhome.net>