对于基类的访问描述符控制着对基类成员的访问,以及从派生
类型到基类类型的指针、引用转换,如冲基类 B 派生类 D :
如果 B 是 private 基类,则其 public 和 protected 成员只能由 D 的
成员函数和友元访问;只有 D 的成员和友元能将 D* 转换到 B*
如果 B 是 protected 基类,则其 public 和 protected 成员只能由 D
的成员函数和友元、以及 D 的派生类的成员函数和友元访问;只
有 D 的成员和友元以及 D 的派生类的成员函数和友元能将 D* 转
换成 B*
如果 B 是 public 基类,则其 public 成员可以由任何函数使用,除
此之外,其 protected 成员还能由 D 的成员函数和友元,以及 D
的派生类的成员函数和友元访问;任何函数都可将 D* 转换到 B*
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"A()---------";
}
void print()
{
cout << "AAAAAAAAAAAAA" << endl;
}
private:
int ival;
};
class B:private A
{
public:
B()
{
cout<<"B()--------------------"<<endl;
}
friend void print_1(B* pb);
friend void print2(B*c);
private:
double dval;
};
void print_1(B* pb)
{
cout << "BBBBBBBBBBBBBB" << endl;
A* p = pb;
p->print();
}
class C:protected B
{
// friend void print2(C *c);
};
void print2(B *c)
{
A *a=c;
cout<<"C()"<<endl;
}
int main()
{
B a,b;
print2(&a);
return 0;
}