#include <iostream.h>
class A
{
public:
A(int x){this->x=x;}
void show(){}
protected:
int x;
};
class B : public A
{
public:
B(int mx=0):A(mx){y=100;}
void show(A& a)
{
cout<<a.x;
}
B operator+(B& b)
{
return this->x+b.x;
}
protected:
int y;
};
void main()
{
B b(10),b2(1);
A a(100);
b2.show(a);
}
上面代码出现错误,由于A中的x是protected的,虽然B是A的派生类,但是由于A只是作为B的某个方法的参数,它仍然只会从外部进行读取,所以不能访问它的内部。但如果参数是本身的类的话,就能正常读取。这说明了派生类不能读取参数基类的非公共成员。