Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #67890

Re: About getters/setters

Path csiph.com!news.swapon.de!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups comp.lang.c++
Subject Re: About getters/setters
Date Thu, 22 Aug 2019 15:09:03 -0700
Organization A noiseless patient Spider
Lines 66
Message-ID <86y2zk26ps.fsf@mailhub.linuxsc.com> (permalink)
References <kSg7F.32840$Xs5.970@fx06.am4>
Mime-Version 1.0
Content-Type text/plain; charset=us-ascii
Injection-Info reader02.eternal-september.org; posting-host="3dc9dd473b90ddbbb978ff4dade5239c"; logging-data="2785"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+3hqR9mRnYXz78WcnDVp1PeHyBRlMb/bU="
User-Agent Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock sha1:Ep/4bN8+3s3I2iOSioF3L3WtHpM= sha1:6bm7+6qxhyzOFzyDXfy7b5VeHaw=
Xref csiph.com comp.lang.c++:67890

Show key headers only | View raw


JiiPee <no@notvalid.com> writes:

[some white space reformatting done]

> Which one is better:  1)
>
>     class Person {
>       public:
>         int getAge() { return age;}
>         void setAge(int a) { age = a;}
>       private:
>         int age;
>     };
>
> or  2)
>
>     struct Person {
>         int age;
>     };
>
> ####
>
> I know Herb Sutter recommended 1) but for example isocpp
>
> https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-get
>
> seems to recommend 2). [...]
>
> I do currently 1) but wondering which way to go.
>
> Like now I have a "Settings" class.  Simple data members.  I started
> adding getters and setters....

I agree with Herb Sutter's recommendation that (assuming the
class or struct has some member functions) data members should
never be public.  There are cases where for data members might
plausibly be made protected rather than private, but never
public.  (Incidentally I am ignoring the "age/birthday" matter
that some other people have commented on, and assuming your
question is meant as generic, with 'age' being merely an
unfortunate choice of example.)

I suggest however a slightly different pattern than (1), along
these lines (disclaimer: not compiled):

    class Person {
        unsigned siblings_;
        // ... other data members ...

      public:
        // ... other member functions

              unsigned &siblings()       { return siblings_; }
        const unsigned &siblings() const { return siblings_; }
    };

Now our accessor functions look more like data member access, but
they remain functions:

    if(  fred.siblings() > 0  )  ...

    fred.siblings() += 1;  // a new birth in fred's family

To me this pattern reads nicer on the client side than set/get
functions.

Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

About getters/setters JiiPee <no@notvalid.com> - 2019-08-21 20:22 +0100
  Re: About getters/setters Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-08-21 19:34 +0000
  Re: About getters/setters Bo Persson <bo@bo-persson.se> - 2019-08-21 21:40 +0200
  Re: About getters/setters Öö Tiib <ootiib@hot.ee> - 2019-08-21 12:52 -0700
    Re: About getters/setters JiiPee <no@notvalid.com> - 2019-08-22 15:25 +0100
      Re: About getters/setters Öö Tiib <ootiib@hot.ee> - 2019-08-22 09:06 -0700
        Re: About getters/setters Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-08-24 04:32 -0700
  Re: About getters/setters Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-08-22 15:09 -0700
    Re: About getters/setters Ian Collins <ian-news@hotmail.com> - 2019-08-23 16:17 +1200
      Re: About getters/setters Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-08-23 05:26 -0700
      Re: About getters/setters Melzzzzz <Melzzzzz@zzzzz.com> - 2019-08-23 18:07 +0000
    Re: About getters/setters JiiPee <no@notvalid.com> - 2019-08-23 07:09 +0100
  Re: About getters/setters JiiPee <no@notvalid.com> - 2019-08-23 07:13 +0100
    Re: About getters/setters David Brown <david.brown@hesbynett.no> - 2019-08-23 09:30 +0200
      Re: About getters/setters Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-08-25 06:16 +0000
        Re: About getters/setters David Brown <david.brown@hesbynett.no> - 2019-08-25 12:12 +0200
  Re: About getters/setters Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-08-23 11:24 +0000
    Re: About getters/setters James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-08-23 08:34 -0400
      Re: About getters/setters Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-08-23 14:48 +0000
      Re: About getters/setters Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-08-23 15:49 +0000

csiph-web