On Wednesday, December 01, 2010 11:40:11 Ali Çehreli wrote: > Matthias Pleh wrote: > > class B{ string toString() {return "screen output routine here";}} > > Isn't the 'override' keyword required? (Perhaps required only in D2?) > > I find string.format very helpful in toString() member functions. > > Finally, I still don't know whether the 'const'ness of the member > function is required, allowed, or completely wrong. :) > > import std.string; > > class A > { > override string toString() const > { > return format("My %s formatted string: %s", "lovely", 42); > } > } > > Ali
override is required if you compile with -w. If you don't use -w, the compiler won't complain, but I'm not sure that it actually overrides the function in that case. So, yes override should be there. Object's toString() is not currently const-correct. It isn't const. So, currently, when overriding toString(), you don't have to make it const. However, you _can_ make it const if you want to (and honestly, Object's toString() _should_ be const; it's just among the changes that need to be made to Object to make it properly const-correct: http://is.gd/i3KUJ ). Making a non-const function const when overriding it is adding guarantees, not loosening them, so it works. Be forewarned, however, that because of bug http://is.gd/i3Lc2 ), _struct_'s toString() cannot be const (or at least, you need a non-const version in addition to a const one if you have a const one). Classes don't have that problem though. - Jonathan M Davis