Shury
Shury

Reputation: 578

Can't access protected member

I have some difficulties understanding the following code. I have 3 classes: A, B and C. A has a private x of type int. B inherits A and everything from it. C inherits from B but protected. This means that both X and Y become inaccessible in class C. Also, get_x() and get_y() become protected in class C. So C should be able to acces the get_x() and get_y() functions but not x and y?

#include<iostream> 
using namespace std; 

class A 
{ 
int x; 
public: A(int i):x(i){} 
int get_x(){ return x; } 
}; 

class B: public A 
{ 
int y; 
public: B(int i,int j):y(i),A(j){} 
int get_y(){ return y; } }; 

class C: protected B 
{
int z; 
public: C(int i,int j,int k):z(i),B(j,k){} 
int get_z(){ return z; } 
}; 

int main() 
{
C c(1,2,3); 
cout<<c.get_x();
cout<<c.get_y();
cout<<c.get_z();
return 0;
}

Upvotes: 1

Views: 75

Answers (2)

Eddie
Eddie

Reputation: 767

It seems like you understood 'protected inheritance' right but misunderstood 'protected members and methods'.

protected methods are inaccessible from outside of class.

Meaning

C c(1,2,3);
cout << c.get_x(); // THIS DOES NOT WORK.

where you can access get_x() is within class C.

class C: protected B 
{
  int z; 
  public: C(int i,int j,int k):z(i),B(j,k){} 
  int get_z(){ return z; }
  int get_x_from_c() { return this->get_x(); } // THIS IS ALLOWED.
};

Upvotes: 4

01000001
01000001

Reputation: 873

Here Even Object of type C class can not use the functions of class A and B. If you want access of member functions then make public access of B to C. do this ... class c : public B{.. then it will be able to access functions but remember not the member variables.

Upvotes: 1

Related Questions