From: "Campbell, Rolf [SKY:1U32:EXCH]" Newsgroups: comp.os.msdos.djgpp,comp.lang.c++ Subject: Accessor methods are annoying. (Was: Re: TABLE OF POINTERS TO FUNCTIONS + OTHER) Date: Fri, 17 Mar 2000 12:35:56 -0500 Organization: Nortel Networks Lines: 33 Message-ID: <38D26CFC.16E69D47@americasm01.nt.com> References: <8am435$j8i$1 AT tron DOT sci DOT fi> <38D1079A DOT 45700792 AT americasm01 DOT nt DOT com> NNTP-Posting-Host: wmerh0tk.ca.nortel.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 4.72C-CCK-MCD [en] (X11; I; HP-UX B.10.20 9000/785) X-Accept-Language: en To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Damian Yerrick wrote: > >And most of the time they are just used to force 'read-only' for > >public access. To start with, I think this should have been part > >of the C++ specification (const public: could mean that outside > >that class's scope it is treated as const). > > But that would break all existing programs if you figured out a better > implementation of the class that didn't use that variable. That is true for my example about 'const public:'. But many other languages offer built-in method of trapping reads/writes to variables. Using this scheme, accessors and mutators only need to be written when the library changes instead of all the time. In C++ this ability is not 'built-in', but it is available (I've written a templatized library to do just this). That class acts just like any other class with a few exceptions. I think it is impossible to get it perfect in C++ (I can't cope with passing that member variable to a function by reference). But just about everything else works... > Data > hiding is one of the reasons why accessor methods exist. How hard is > my_string.length() > when string::length() is inlined to return my_string._length? Data hiding is good for backwards compatability, but you don't need backwards compatability until the class changes... -- (\/) Rolf Campbell (\/)