一、程序
Main.cpp:
#include <istream>
using namespace std;
class A {
public :
int _a;
protected :
int _b;
private :
int _c;
} ;
class Pub_B : public A {
public :
void Test ( ) {
_a = 10 ;
_b = 10 ;
}
int pub_pub_b1;
protected :
int pub_pro_b2;
private :
int pub_pri_b3;
} ;
class Pro_B : protected A {
public :
void Test ( ) {
_a = 10 ;
_b = 10 ;
}
int pro_pub_b1;
protected :
int pro_pro_b2;
private :
int pro_pri_b3;
} ;
class Pri_B : private A {
public :
void Test ( ) {
_a = 10 ;
_b = 10 ;
}
int pri_pub_b1;
protected :
int pri_pro_b2;
private :
int pri_pri_b3;
} ;
class newPri_B : private A {
public :
void Test ( ) {
_a = 10 ;
_b = 10 ;
}
int pri_pub_b1;
using A:: _a;
protected :
int pri_pro_b2;
private :
int pri_pri_b3;
} ;
void test ( )
{
A a;
a. _a;
Pub_B s1;
s1. pub_pub_b1;
s1. _a;
Pro_B s2;
s2. pro_pub_b1;
Pri_B s3;
s3. pri_pub_b1;
newPri_B s4;
s4. pri_pub_b1;
s4. _a;
}
友元类继承测试(main.cpp)
#include <istream>
using namespace std;
class A {
private :
int _a;
friend class C ;
} ;
class B : public A {
private :
int b;
} ;
class C {
public :
void Test ( ) {
B b1;
b1. _a;
}
} ;
class D : public C {
public :
void Test ( ) {
A a1;
B b2;
}
} ;
二、总结
继承访问权限测试:
B以private方式继承A,用{using A::_a; }把A中的部分public成员提升为public 如果想让这些继承而来的数据成员作为public或者protected成员,可以用using重新声明。using声明语句中名字的访问权限由该using声明语句之前的访问说明符决定。
友元类继承测试:
设计类A含有私有变量a,在类A中友元给类C;设计类B继承A,添加私有变量b;在类C中测试访问类B的成员变量a, b;此时类C中访问不到类B的私有成员量b,但是访问得到成员量a。 设计类D继承C,在D的成员函数中测试访问类A的成员变量a,类B的成员变量a, b。对于类D来说,A的成员变量a,类B的成员变量a, b均不可见。 当类Y被说明为类X的友元时,类Y的所有成员函数都成为类X的友元函数,这就意味着作为友元类Y中的所有成员函数都可以访问类X中的所有成员(包括私有成员)。 友元关系是单向的,不具有交换性。友元关系也不具有传递性。友元关系不能被继承,基类的友元类未必是子类的友元,某类型的友元的子类未必是该类型的友元。