Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Why this code is not working? (http://www.go4expert.com/forums/code-t17329/)

imrantechi 4May2009 17:37

Why this code is not working?
 
CASE 1: Following code is not working...saying
error: `int Base::j' is protected
error: within this context


Code:

#include<iostream.h>

class Base
{
public:
  Base() { i=10; j=20;}
  int i;
protected:
  int j;
};

class Derived : public Base
{
public:
  Derived() { k=30;}
  int k;
void fun(Base);
};

void Derived :: fun(Base b)
{
  b.i=100;
  b.j=200;  //Problem is here...
}

int main()
{
  Base Bobj;
  Derived Dobj;
  Dobj.fun(Bobj);
     
  return 0;
}


CASE 2: This code works fine...This is reasonable...
Code:

#include<iostream.h>

class Base
{
public:
  Base() { i=10; j=20;}
  int i;
protected:
  int j;
};

class Derived : public Base
{
public:
  Derived() { k=30;}
  int k;
void fun(Base);
};

void Derived :: fun(Base b)
{
  b.i=100;
  this->j =200;
  //b.j=200;
}

int main()
{
  Base Bobj;
  Derived Dobj;
  Dobj.fun(Bobj);
     
  return 0;
}

But in case 1, i think compilation error should not come, because protected member is accesing by derived function only.

sharmila 4May2009 17:59

Re: Why this code is not working?
 
In base calss j is protected member. In case 1 you are trying to assign value for a protected member . so it failed.
Where as in case 2, you used 'this' means derived class object. When a derived class object is created internally it will create base class object too . Since j is protected it is accessible by the derived class..
So you can assign the value. Where as in case 1 Base b is a different object, so you can't access the protected variable.


All times are GMT +5.5. The time now is 13:30.