Thread overview |
---|
June 06, 2006 [Bug 177] New: remove inheritance protection | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/bugzilla/show_bug.cgi?id=177 Summary: remove inheritance protection Product: D Version: unspecified Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: benoit@tionex.de Every class in D is inherit from the class 'Object'. D does not support multiple inheritance. But if I do this: class D{ } class T : private D { } Now this invariant is not true any more. The functionality from Object is no more visible to a user of T. e.g. container can complain, they cannot access opEqual. I think the D spec is not logic in this point and the inheritance protection should be removed. -- |
June 09, 2006 [Bug 177] remove inheritance protection | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/bugzilla/show_bug.cgi?id=177 bugzilla@digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID ------- Comment #1 from bugzilla@digitalmars.com 2006-06-09 03:50 ------- If one needs to access members of the base class, it shouldn't be marked as private. The compiler behaves as designed to for private base classes. -- |
June 09, 2006 [Bug 177] remove inheritance protection | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/bugzilla/show_bug.cgi?id=177 benoit@tionex.de changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |REOPENED Resolution|INVALID | ------- Comment #2 from benoit@tionex.de 2006-06-09 04:57 ------- Is this a misunderstanding? From the D-spec, section classes, first paragraph: "The object-oriented features of D all come from classes. The class hierarchy has as its root the class Object. Object defines a minimum level of functionality that each derived class has, and a default implementation for that functionality." Now, if one inherits protected or private from any class, the class 'Object' is no more visible. Thats my point. The compiler does it job right, but the spec is not logic in this point. The second argument for removing this protection is that this doesn't make sense in a language without multiple inheritance. E.g. java does not have this protected. I think exactly because of this. Private inheritance is good for a "implemented with" relation. This makes sense in C++, not in D. In D, a possible way is using mixins. (if bug 106 is fixed ;) ) -- |
Copyright © 1999-2021 by the D Language Foundation