一、实验目的
1. 理解不同继承属性对派生类访问基类成员的区别
2. 掌握单继承程序编写
二、实验任务
1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以public方式继承A)
重点:理解不同继承方式数据的访问权限,派生类对象的使用。
#include
using namespace std;
class A//基类
{
private:
int a;
public:
void seta(int i)
{
a=i;
}
int geta(){ return a;}
};
class B:public A //派生类B公有继承基类A
{
private:
int b;
public:
void setb(int i){b=i;}
int getb(){ return b;}
void show(){cout<<"A::a="<//思考1:派生类B中的函数是否可以直接访问从基类继承过来的私有数据成员?
不可以直接访问,因为无论用何种方式继承,从基类继承过来的私有数据成员都是不可访问的,只有基类本身可以访问其私有成员,但是可以通过在基类中提供访问函数来进行访问。
};
int main()
{
B bb;//思考2:对象bb的数据成员有几个?初始化值是什么?
bb中有2个数据成员,一个是从基类继承下来的私有数据成员,一个是派生类B自己定义的私有数据成员。初始化值不确定,因为没有提供构造函数进行初始化。
bb.seta(6);
bb.setb(3);
bb.show();
cout<<"A::a="<
不可以。可以通过在基类中提供访问函数来进行访问,即通过基类公有成员函数进行间接访问。
cout<<"B::b="<
类外对象不可以访问私有数据成员,可以通过基类公有成员函数进行间接访问。
cout<<"A::a="< cout<<"B::b="< return 0; } 实验思考与结果分析: (1)不可以直接访问,因为无论用何种方式继承,从基类继承过来的私有数据成员都是不可访问的,只有基类本身可以访问其私有成员,但是可以通过在基类中提供访问函数来进行访问。 (2)bb中有2个数据成员,一个是从基类继承下来的私有数据成员,一个是派生类B自己定义的私有数据成员。初始化值不确定,因为没有提供构造函数进行初始化。 (3)不可以。可以通过在基类中提供访问函数来进行访问,即通过基类公有成员函数进行间接访问。 (4)类外对象不可以访问私有数据成员,可以通过基类公有成员函数进行间接访问。 修改后的程序代码: 7 运行结果: 2、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因(该题中A为基类,B为派生类,B以private方式继承A) #include using namespace std; class A //基类 { private: int a; public: void seta(int i) { a=i; } int geta(){ return a;} }; class B:private A //派生类B私有继承基类A { private: int b; public: void setb(int i){b=i;} int getb(){ return b;} void show_0(){cout<<"A::a="<//思考1:派生类B中的函数是否可以直接访问从基类私有继承过来的私有数据成员? 派生类B中的函数不能直接访问从基类私有继承过来的私有数据成员,因为这些成员在派生类中是不可见的。 void show(){cout<<"A::a="< }; 派生类B中的函数不能直接访问从基类私有继承过来的成员函数,因为这些函数在派生类中是不可见的。 int main() { B bb;//思考3:对象bb的数据成员有几个?初始化值是什么? 对象bb的数据成员有两个,分别是b和a,但是a是以private方式继承到派生类B中的,因此在派生类