C++ 例4.1 私有继承的访问规则举例1

来源:互联网 发布:做网络推广怎么找客户 编辑:程序博客网 时间:2024/06/05 20:45
//例4.1 私有继承的访问规则举例1.#include<iostream>using namespace std;class Base{                 //声明基类Basepublic:  void setx(int n)      //正确,成员函数setx可以访问本类的私有成员x  {x = n;  }  void showx()          //正确,成员函数showx可以访问本类的私有成员x  {cout<<x<<endl;  }private:int x;};class Derived:private Base{// 声明基类Base的私有派生类Derived  public:  void setxy(int n,int m){setx(n);  //基类的setx函数在派生类中为私有成员,派生类成员函数可以访问y=m;      //正确,成员函数setxy可以访问本类的私有成员y}void showxy(){  //cout<<x;  //错误,派生类成员函数不能直接访问基类的私有成员x  cout<<y<<endl;//正确,成员函数showxy可以访问本类的私有成员y}private:  int y;};int main(){Derived obj;//obj.setx(10);   //错误,setx在派生类中为私有成员,派生类对象不能访问//obj.showx();    //错误,showx在派生类中为私有成员,派生类对象不能访问obj.setxy(20,30); //正确,setxy在类derived为公有成员,派生类对象能访问obj.showxy();     //正确,showxy在类derived为公有成员,派生类对象能访问return 0;}/*本例中首先定义了一个类Base,它有一个私有数据成员x和两个公有成员函数setx和showx。将类Base作为基类,派生出一个类Derived。派生类Derived除继承了基类的成员外,还有只属于自己的成员:私有数据成员y,公有成员函数setxy和showxy。继承方式关键字是private,所以这是一个私有继承。由于是私有继承,所以基类Base的公有成员函数setx和showx被派生类Derived私有继承后,成为派生类Derived的私有成员,只能被类Derived的成员函数访问,不能被派生类的对象访问。所以在main函数中,对函数obj.setx和obj.showx的调用是错误的,因为这两个函数在派生类Derived中已成为私有成员。需要注意的是,虽然函数setx和showx被派生类继承,但它们仍然是Base的公有成员,因此以下的调用是正确的:Base base_obj;base_obj.setx(2);虽然派生类Derived私有继承了基类Base,但它的成员函数并不能直接访问Base的私有数据x,只能访问两个公有成员函数。所以在类Derived的成员函数setxy中访问Base的公有成员函数setx是正常的,但在成员函数showxy中直接访问Base的私有成员x是错误的。但是可以通过基类提供的公有成员函数showx间接访问私有成员x。例如将函数main中两条错误词句去掉,并且把例中函数showxy改成如下形式:void showxy(){ showx();  cout<<y<<endl;}重新编译,程序将顺利通过。可见基类中的私有成员既不能被派生类的对象访问,也不能被派生类的成员函数访问,只能被基类自己的成员函数访问。因此,我们在设计基类时,总要为它的私有数据成员提供公有成员函数,如本例的成员函数showx等,以便使派生类可以间接访问这些数据成员。   修改后,程序运行结果如下:   20   30*/

阅读全文
0 0
原创粉丝点击