试验目的:
1.掌握派生类的声明方法和派生类构造函数的定义方法
2.掌握不同方式下,基类成员在派生类中的访问属性和访问规则。
写出以下程序并运行结果:
#include<iostream>
using namespace std;
class Base
{
public:
void setx(int i)
{
x = i;
}
int getx()
{
return x;
}
public:
int x;
};
class Derived :public Base
{
public:
void sety(int i)
{
y = i;
}
int gety()
{
return y;
}
void show()
{
cout << "Base::x=" << x << endl;
}
public:
int y;
};
int main()
{
Derived bb;
bb.setx(16);
bb.sety(25);
bb.show();
cout << "Base::x=" << bb.x << endl;
cout << "Derived::y=" << bb.y << endl;
cout << "Base::x=" << bb.getx() << endl;
cout << "Derived::y=" << bb.gety() << endl;
return 0;
}
结果如下:
按照以下要求,对程序进行修改后再调试,指出调试中出错的原因:
1.将基类Base中数据成员x的访问权限改为private时,会出现哪些错误,为什么?
由于Base类中的成员数据x被改为私有,x不能被外部函数调取,也不能被派生类的成员函数调取。
2.将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误,为什么?
由于Base类中的数据成员x被改为保护,x可以被公有派生类的成员函数保护调取,但不可被外部函数调取。
3.在原程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误,为什么?
由于Derived的继承方式被改为private,基类中的成员都不可被外部访问。
4.在原程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误,为什么?
由于Derived的继承方式被改为protect,基类中的成员也都不可以被外部访问。