实验内容
一、继承访问权限测试
设计类A具有public, protected, private等不同属性的成员函数或变量;
#include<istream>
#include<iostream>
using namespace std;
class A {
public:
int a1;
protected:
int a2;
private:
int a3;
};
类B通过public, protected, private等不同方式继承A,在类B的成员函数中测试访问A的成员函数或变量;
class B1:public A{
public:
void M1(){
A1;//可以访问public 权限为public
A2;//可以访问protected 权限为protected
A3;//无法访问
}
};
class B2:protected A{
public:
void M2(){
A1;//可以访问public 权限为protected
A2;//可以访问protected 权限为protected
A3;//无法访问
}
};
class B3:private A{
public:
void M3(){
A1;//可以访问public 权限为private
A2;//可以访问protected 权限为private
A3;//无法访问
}
};
在类B中添加public, protected, private等不同属性的成员函数或变量,在外部测试访问B的各个成员函数或变量;
class B{
public:
int B1;
protected:
int B2;
private:
int B3;
};
void t1(){
B t;
t.B1;//在外部可以访问B类的public成员变量
t.B2;//无法访问
t.B3;//无法访问
}
B以private方式继承A,尝试把A中的部分public成员提升为public。
class B4:private A{
public:
using A::A1;
};
void t2(){
B4 t_2;
t_2.A1;//可以在外部访问,因此它的属性是public
}
二、友元类继承测试
设计类A含有私有变量a,在类A中友元给类C;
class A{
friend class C;
private:
int A1;
};
设计类B继承A,添加私有变量b;在类C中测试访问类B的成员变量a, b;
class B:public A{
private:
int A2;
};
class C{
public:
void M1(){
A a;
a.A1;
B b;
b.A1;
b.A2;//c无法访问自己的私有成员
}
};
设计类D继承C,在D的成员函数中测试访问类A的成员变量a,类B的成员变量a, b。
class D:public C{
public:
void M2(){
A a;
a.A1; //D访问不到A的私有成员a
B b;
b.A1; //D访问不到B从A继承下来的私有成员a
b.A2; //D访问不到B的私有成员b
}
};
总结
一、继承访问权限测试
本次的实验中涉及一个重要概念:继承。继承的属性在C++中分为public,protected,private3种,分别可以称作公有,保护和私有。被继承的常被称为父类(基类),而通过继承生成的类常被称为子类(派生类)
通过实验可知,公有继承的属性权限不变,保护继承的属性权限到子类只有public变为protected,其他两类不变,私有继承的属性权限到子类全为private
如果想让继承而来的数据成员作为public或者protected成员,可以用using重新声明。
二、友元类继承测试
友元同样是c++中重要的概念之一,具体的应用可以分为友元函数和友元类;对于友元函数而言,可以简单概括为使声明函数在类的外部能够访问本来不能访问的保护和私有对象。
设计类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均不可见,说明基类的友元类未必是子类的友元。