Author |
Message |
michaelp
|
Posted: Sat Jan 05, 2008 9:35 pm Post subject: class function access other private data member? |
|
|
Well, I am making a small game to test my C++ and get better at it too. ;D
What I want to know is: How can one class's function access another class's private data members?
Here is an example: (Not the code in my actual game, ignore any errors in the code)
code: | class Person
{
public:
void function(Enemy enemy1)
{
cout << "you attacked, the enemy now has " <<
//I want this function to access be able to access and change "dataMember" in the enemy class
}
};
class Enemy
{
private:
int dataMember;
}; |
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
DIIST
|
Posted: Sat Jan 05, 2008 9:44 pm Post subject: Re: class function access other private data member? |
|
|
michaelp @ January 5th 2008 wrote: Well, I am making a small game to my C++ and get better at it too. ;D
What I want to know is: How can one class's function access another class's private data members?
Here is an example: (Not the code in my actual game, ignore any errors in the code)
The whole point of private members is hide methods,&variables from anything outside the class. If you want to access the members just make them public or protected( can only be accessed withen the class and subclasses). |
|
|
|
|
|
md
|
Posted: Sat Jan 05, 2008 11:09 pm Post subject: RE:class function access other private data member? |
|
|
I am not completely certain as I have never tried (or read about it, shame on me...) but private members are always inaccessible. You could use protected member data though. Then you just need to make Person a friend class to Enemy.
However! An enemy is a person, so maybe you are looking at this in the wrong way and Enemy should be derived from Person? |
|
|
|
|
|
wtd
|
Posted: Sat Jan 05, 2008 11:27 pm Post subject: RE:class function access other private data member? |
|
|
In all likelihood md is correct with regards to Enemy being derived from Person. Of course, the assumes that an Enemy can only be a Person. Perhaps Enemy should be a purely virtual base class, and EnemyPerson should derive from both Person and Enemy. |
|
|
|
|
|
michaelp
|
Posted: Sun Jan 06, 2008 8:43 am Post subject: RE:class function access other private data member? |
|
|
I'll try using protected data members first...
How do you make a class a friend of another class? |
|
|
|
|
|
md
|
Posted: Sun Jan 06, 2008 11:15 am Post subject: RE:class function access other private data member? |
|
|
c++: | class foo { ... };
class bar
{
friend class foo;
...
}
|
|
|
|
|
|
|
OneOffDriveByPoster
|
Posted: Sun Jan 06, 2008 11:48 am Post subject: Re: RE:class function access other private data member? |
|
|
md @ Sat Jan 05, 2008 11:09 pm wrote: I am not completely certain as I have never tried (or read about it, shame on me...) but private members are always inaccessible. You could use protected member data though. Then you just need to make Person a friend class to Enemy. Afaik, a friend of a class can access private members of the class granting friendship. |
|
|
|
|
|
michaelp
|
Posted: Sun Jan 06, 2008 11:50 am Post subject: RE:class function access other private data member? |
|
|
Okay, thanks, the friend class and protected data members worked. |
|
|
|
|
|
Sponsor Sponsor
|
|
|
CodeMonkey2000
|
Posted: Sun Jan 06, 2008 2:47 pm Post subject: RE:class function access other private data member? |
|
|
Shouldn't enemy inherit person? |
|
|
|
|
|
md
|
Posted: Sun Jan 06, 2008 3:31 pm Post subject: Re: RE:class function access other private data member? |
|
|
CodeMonkey2000 @ 2008-01-06, 2:47 pm wrote: Shouldn't enemy inherit person?
It could, or as wtd pointed out on irc person could inherit enemy as not all enemies are persons.
I'm thinking I wouldn't be using such classes in anything I wrote; and definitely not friend functions accessing private data. Better class hierarchies make inheritance easy, and using friend functions/classes to access private data is almost always bad practice. |
|
|
|
|
|
wtd
|
Posted: Sun Jan 06, 2008 11:16 pm Post subject: RE:class function access other private data member? |
|
|
No no... I'm suggesting using both interface and implementation inheritance. |
|
|
|
|
|
|