| 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. |  
				|  |  | 
	 
		|  |  | 
	
 
		|  | 
				 
		|  |