• 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

    • 2025 finally the Year of Linux? LibreOffice explains "real costs" of Windows 11 by Sayan Sen A big change is coming to Windows PCs as Microsoft will soon end support for systems and devices running on Windows 10. As such, the company, alongside its partners like AMD, Asus, and Dell, have begun urging users to embrace the "mandatory Windows 11 upgrade." The problem is that not every PC out there will be able to do so, at least not officially, as Microsoft had declared higher requirements for Windows 11 and thus many systems would be left out. Redmond's official stance for such situations is that users get a new computer by dumping their older system. There is another option users have: switching to Linux. Back in January, earlier this year, ESET recommended that users do that if they can not upgrade from Windows 10 to 11 or perhaps when they do not want to. Last month, KDE launched a new campaign dubbed "Endof10", which encourages users to make the jump. The project page explains several of the benefits of Linux over an unsupported Windows 10 system, like security and privacy, among others. And it also published another post earlier this month welcoming such "Windows 10 exiles". Now, The Document Foundation, maker of LibreOffice, has also joined in to support the Endof10 initiative. The foundation writes: "You don’t have to follow Microsoft’s upgrade path. There is a better option that puts control back in the hands of users, institutions, and public bodies: Linux and LibreOffice. Together, these two programmes offer a powerful, privacy-friendly and future-proof alternative to the Windows + Microsoft 365 ecosystem." It further adds the "real costs" of upgrading to Windows 11 as it writes: "The move to Windows 11 isn’t just about security updates. It increases dependence on Microsoft through aggressive cloud integration, forcing users to adopt Microsoft accounts and services. It also leads to higher costs due to subscription and licensing models, and reduces control over how your computer works and how your data is managed. Furthermore, new hardware requirements will render millions of perfectly good PCs obsolete. .... The end of Windows 10 does not mark the end of choice, but the beginning of a new era. If you are tired of mandatory updates, invasive changes, and being bound by the commercial choices of a single supplier, it is time for a change. Linux and LibreOffice are ready — 2025 is the right year to choose digital freedom!" To help users with the migration from Windows to Linux, The Document Foundation has laid out some key steps on how to proceed: Start by testing Linux and LibreOffice on a second partition of your PC (for individuals) or in less critical departments (for companies). Check the compatibility of your software configuration with Linux and LibreOffice; most office tasks can easily be transferred or adapted with minimal effort. Build documentation to learn how Linux and LibreOffice work and organise training if necessary. Find a consultant who can help with the migration process, such as someone certified by the Linux Professional Institute or The Document Foundation (for LibreOffice). The foundation stresses how "important" it is to "start immediately" with the transition. You can find the full details about the announcement here in the official blog post.
    • Why is it that some people think we have a tinfoil hat mentality, as you put it, just because we don't want AI on our devices? As for MS or any other company looking at everything, it seems to be the thing these days that companies want to know all about us. Can't even go shopping these days without being asked if you have some sort of card that tell them what you are buying and who you are.
    • Until the employer looks right though the AI created letter and notice it is AI created. You will be surprised how many can tell, there is something about an AI created letter that stands out to some people.
    • Snapchat brings new features, including auto-saving for public Stories by David Uzondu Snapchat, which recently expanded to watchOS after a decade, is rolling out new tools for its creators. The company says people are watching more content than ever, so these updates are meant to help creators get more out of that attention. The new features focus on a few key areas: making video editing less of a hassle, showing who is actually watching, and saving posts that used to vanish forever. Video editing on the platform has always been a huge problem. The tools are fine for quick clips, but they get messy if you try to do anything more complex. A new Timeline Editor for creators in the US is coming "soon" to fix this. It shows your video clips in a simple timeline, letting you cut and move parts around without wanting to pull your hair out. You can still add all the usual Lenses and music on top of these edits. For even quicker edits, a "Create a Video" template is now available globally for iOS users. The idea is simple: you look through your saved Memories, pick a handful of photos or videos, and then choose a song from the app's library. After you select a template, Snapchat mashes it all together into a single compilation video for you. But making videos is only part of the job. To help people see if anyone is paying attention, new insights are also available. These stats give a much better idea of how an audience behaves. Instead of just one giant view number, creators can now track "Returning Viewers." This counts how many people watched their content at least 12 times in the last month. Other metrics include the "Spotlight Average View Rate," showing what percentage of a video people finished. You can also see "Views by Traffic Sources," which tells you if people found you from the Discover page, search, or their own feed. Finally, there is a new "Auto-Save Stories to Public Profiles" feature. For years, the whole point of a Snapchat Story was that it was temporary. This new option, which is rolling out to creators globally, automatically saves public Stories to a creator's profile. Snapchat notes that the new feature "helps creators build a lasting collection of their best moments, giving fans a deeper look into their creative journey and making it easier to keep content alive, accessible, and meaningful over time."
    • I did not think it could be removed, all it does is remove the icon, co-pilot is still there as far as I know. Also don't forget the other apps it is in. What is needed is a simple thing to click to remove co-pilot and any AI rubbish from the computer, just like I can on my Mac.
  • 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
      562
    2. 2
      ATLien_0
      256
    3. 3
      +Edouard
      163
    4. 4
      +FloatingFatMan
      156
    5. 5
      Michael Scrip
      109
  • Tell a friend

    Love Neowin? Tell a friend!