• 0

[C++] Accessing private member variables


Question

Hi, I'm new to C++ and OOP. I've been having a problem with a concept.

class samp
{
	int i;
public:
	samp(int n)
	{
		i = n;
	}
	int func(samp ob)
	{
		return ob.i;
	}
};

Now, i is a private member of the class samp. So, how can the parameter ob access i directly? I know func(ob) is a member function of the class. But I thought private members can only be accessed with a this pointer.

Can anyone explain why the above code works?

10 answers to this question

Recommended Posts

  • 0
  On 14/09/2011 at 16:08, kInG aLeXo said:

You need the this pointer only if the parameter name is same as a variable name in the class (public or private, because it does shadow the class variable in that case).Otherwise, this is not needed, and is implicitly "included".

I understand that. But, my real question was, how can "ob", which is a parameter of the fuctions func(), directly access ob.i? Doesn't that break the whole idea of having private variables?

  • 0
  On 14/09/2011 at 16:13, Solid Knight said:

Because i isn't private.

This is C++ not Java, i is private by default (he didn't include it in the public, so its by default implicitly private).

  On 14/09/2011 at 16:13, Gigi Buffon said:

I understand that. But, my real question was, how can "ob", which is a parameter of the fuctions func(), directly access ob.i? Doesn't that break the whole idea of having private variables?

I had this very exact mistake in an exam..

Turns out, if the calling class is of the same type, it can actually access the private variables, and even the private constructors and functions of another instance of the same class.(ie: this code works only because func is member of samp class, which is same class of ob parameter, if func was member of another class it won't work).

  • 0

If you know what friend is, you can think of a class being a friend of itself. This allows it to access private members of another object of the same class.

I'm sure there are several reasons for this. The main one I find is that when writing copy constructors you need to access private variables that you might not otherwise want to be exposed.

  • 0
  On 14/09/2011 at 16:16, kInG aLeXo said:

Turns out, if the calling class is of the same type, it can actually access the private variables, and even the private constructors and functions of another instance of the same class.(ie: this code works only because func is member of samp class, which is same class of ob parameter, if func was member of another class it won't work).

Thanks for explaining. I was thinking the same, but couldn't find any reference for it.

  • 0
  On 14/09/2011 at 16:23, Lant said:

If you know what friend is, you can think of a class being a friend of itself. This allows it to access private members of another object of the same class.

I'm sure there are several reasons for this. The main one I find is that when writing copy constructors you need to access private variables that you might not otherwise want to be exposed.

I only know about friend functions, not friend classes. So I can't understand how a class can be a friend of itself. Maybe you meant the member functions of a class are friends of that class? If that's the case, then everything makes sense.

Edit: Just read up on friend classes. Yes, your post makes plenty of sense now. Thank you.

  • 0
  On 14/09/2011 at 16:26, Gigi Buffon said:

Thanks for explaining. I was thinking the same, but couldn't find any reference for it.

In many cases just trust the compiler, even if you find in some reference a different thing.If you can, use GCC instead of Visual Studio (for Windows I recommend Code::Block with MingW), its much better compliant to the C++ standards.

  • 0

" the private keyword specifies that those members are accessible only from member functions and friends of the class. This applies to all members declared up to the next access specifier or the end of the class." private (C++)

It turns out encapsulation is done at the class level, not at the object level. An object of type Foo can access the private members of another object of type Foo and that doesn't break encapsulation because both objects are of the same type. In other words, they know how the other is laid out since it's of the same type. So they're only using information already available to them. Encapsulation is broken when a type Y makes an assumption about type X's implementation.

  • 0
  On 14/09/2011 at 16:34, kInG aLeXo said:

If you can, use GCC instead of Visual Studio (for Windows I recommend Code::Block with MingW), its much better compliant to the C++ standards.

What does this have to do with the OP?

This is just an opinion which imo is plain rubbish. Compliant to what standard? C++11? There are no compilers fully compliant to that.

Imo Visual C++ has a superior debugger than GCC and Visual studio is a better IDE than Code::Blocks.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Once people get use to the square-ish case, they'll probably switch the display to square as well.
    • Why would you think it's not enabled all the time? Because they said so?
    • $100 billion of the $200 billion is in N.Y. State over the upcoming 20 years plus. Obviously 20+ year spending plans are subject to change.
    • I own one somewhere and even got the email from Amazon letting me know about the recall but not sure I'll be able to find it. Haven't seen it in months.
    • Steam games now detail what accessibility features they offer on store pages by Pulasthi Ariyasinghe Valve has pushed a new update for its Steam platform, and it's fully focused on accessibility. The latest change makes it both easier for developers to show what accessibility options they offer within their games and for players to find options they require to enjoy titles. "This update comes after gathering valuable feedback from developers as well as players with disabilities," says Valve in the announcement blog post. "Over 5,000 applications have added details about their accessibility support, with more developers updating their games each day." Here are the options currently offered by Valve: Gameplay: Adjustable Difficulty: Players can adjust gameplay difficulty. Save Anytime: Players can save gameplay using both automatic and manual saves. Saving can be performed at any point in the game. Audio: Custom Volume Controls: Players can adjust the volume of the audio. Different types of audio can be muted independently from each other. Narrated Game Menus: Players can listen to game menus with narrated audio. Stereo Sound: Players can identify how far to the left or right sounds are coming from. Surround Sound: Players can identify how far in any direction sounds are coming from. Visual: Adjustable Text Size: Players can adjust text size. (In-game text, menu text, character dialog text, subtitle text) Subtitle Options: Players have options to customize the display of subtitles for all spoken content and essential audio information. Color Alternatives: Gameplay doesn't rely on colors to communicate important information, or players have an option to adjust colors used for distinguishing information. Camera Comfort: Players have an option to adjust or disable uncomfortable camera movement such as screen shaking, camera bob, or motion blur, or the game doesn't feature these effects. Input: Keyboard Only Option: Players can play the game with just a keyboard and no other additional input mechanisms such as a mouse or controller. Mouse Only Option: Players can play the game with just a mouse and no other additional input mechanisms such as a keyboard or controller. Touch Only Option: Players can play the game with just touch controls and no other additional input mechanisms such as a mouse, keyboard or controller. Playable without Timed Input: Players have an option to adjust gameplay to not require precisely timed button presses ("quick time events") or gameplay does not require such button presses. Text-to-speech: Text chat can be narrated out loud in real time. Speech-to-text communications: Voice chat can be read as a text transcript in real time. These can be found when searching in the filters as well as inside games' store pages in the features section on the right side, as seen in the screenshot above. While developers are not required to mention accessibility options of their games on store pages, Valve says it is highly recommended to make sure players that require it can find relevant games more easily. "We've worked to make it as easy as possible for developers to indicate these features are available by using feedback to standardize these options as much as possible," added the company.
  • Recent Achievements

    • One Month Later
      POR2GAL4EVER earned a badge
      One Month Later
    • One Year In
      Orpheus13 earned a badge
      One Year In
    • One Month Later
      Orpheus13 earned a badge
      One Month Later
    • Week One Done
      Orpheus13 earned a badge
      Week One Done
    • Week One Done
      serfegyed earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      546
    2. 2
      ATLien_0
      249
    3. 3
      +Edouard
      163
    4. 4
      +FloatingFatMan
      157
    5. 5
      Michael Scrip
      110
  • Tell a friend

    Love Neowin? Tell a friend!