现在的位置: 首页 > 综合 > 正文

面向对象程序设计:继承成员访问控制机制

2013年04月04日 ⁄ 综合 ⁄ 共 4452字 ⁄ 字号 评论关闭

/*面向对象程序设计:继承成员访问控制机制
---------------------------------------------
成员访问控制 |   类自身 |  派生类 |  其它类 |
---------------------------------------------
    private  |  可以访问| 不能访问| 不能访问|
    protected|  可以访问| 可以访问| 不能访问|
    public   |  可以访问| 可以访问| 可以访问|
---------------------------------------------*/

/*在继承中加访问控制机制
-------------------------------------------------------
基类成员访问控制 | 继承访问控制 | 在派生类中的访问控制|
-------------------------------------------------------
    public       |              |     public          |
    protected    |   public     |     protected       |
    private      |              |     不可访问        |
-------------------------------------------------------
    public       |              |     protected       |
    protected    |   protected  |     protected       |
    private      |              |     不可访问        |
-------------------------------------------------------
    public       |              |     private         |
    protected    |   private    |     private         |
    private      |              |     不可访问        |
-------------------------------------------------------*/

#include<stdio.h>
#include<iostream.h>
//基类class1
class class1
{
public:
    friend void f1()
    {
        cout<<"class1 f1"<<endl;
    };
    void f4()
    {
        f1();//合法,类自身来访问公有public、保护protected、私有private成员以及数据是畅通无阻的
        f2();//合法
        f3();//合法
    };
protected:
    void f2();
private:
    void f3();
};

//派生类class2继承基类class1,默认为private方式
class class2:class1
{
public:
    void ff1()
    {
        f1();//合法,派生类只能访问基类的公有public、保护proteced的成员。
        f2();
        f4();
        //f3();//非法,派生类不能访问基类(父类)的私有成员,一个类的私有成员是不被继承的。
    };       //class2 只能继承class1的公有的、保护的成员,是不能继承class1有私有成员的。
protected:
    void ff2();
private:
    void ff3();
};

//其它类
class calss3
{
public:
    void fff1()
    {
        f1();//合法,其它类class3只能访问其它类class1的公有(public)的成员
    }
protected:
private:
};

//派生类class4继承基类class1,proteced方式
class class4:protected class1
{
public:
    void ff1()
    {
        f1();//
        f2();
        f4();
        //f3();//非法
    };       //
    void ff4()
    {
        //f3();//非法
    };
protected:
    void ff2();
private:
    void ff3();
};

//派生类class5继承基类class1,private方式
class class5:private class1
{
public:
    void ff1()
    {
        f1();//
        f2();
        f4();
        //f3();//非法。
    };       //
    void ff4()
    {
        //f3();//非法
    };
protected:
    void ff2();
private:
    void ff3();
};
void main()
{
    int a[4][3][4];
    class2 obj2,*p;
    p=new class2;
    obj2.ff1();//合法,一个类的对象只能访问它的类的公有成员。
    //obj2.ff2();//非法访问,一个类的对象只能是不能访问它的类的保护(protected)、私有(private)成员的,
               //相当于另一个类classOther中的代码,其实就是classOther发出来的。
                //实际上就是其它类在访问class1当中的成员
    //obj2.ff3();//非法访问类的私有成员

    scanf("%d",&a);
    printf("%4d",a);

}

/*面向对象程序设计:继承成员访问控制机制
---------------------------------------------
成员访问控制 | 类自身 | 派生类 | 其它类 |
---------------------------------------------
private | 可以访问| 不能访问| 不能访问|
protected| 可以访问| 可以访问| 不能访问|
public | 可以访问| 可以访问| 可以访问|
---------------------------------------------*/

/*在继承中加访问控制机制
-------------------------------------------------------
基类成员访问控制 | 继承访问控制 | 在派生类中的访问控制|
-------------------------------------------------------
public | | public |
protected | public | protected |
private | | 不可访问 |
-------------------------------------------------------
public | | protected |
protected | protected | protected |
private | | 不可访问 |
-------------------------------------------------------
public | | private |
protected | private | private |
private | | 不可访问 |
-------------------------------------------------------*/

#include<stdio.h>
#include<iostream.h>
//基类class1
class class1
{
public:
friend void f1()
{
cout<<"class1 f1"<<endl;
};
void f4()
{
f1();//合法,类自身来访问公有public、保护protected、私有private成员以及数据是畅通无阻的
f2();//合法
f3();//合法
};
protected:
void f2();
private:
void f3();
};

//派生类class2继承基类class1,默认为private方式
class class2:class1
{
public:
void ff1()
{
f1();//合法,派生类只能访问基类的公有public、保护proteced的成员。
f2();
f4();
//f3();//非法,派生类不能访问基类(父类)的私有成员,一个类的私有成员是不被继承的。
}; //class2 只能继承class1的公有的、保护的成员,是不能继承class1有私有成员的。
protected:
void ff2();
private:
void ff3();
};

//其它类
class calss3
{
public:
void fff1()
{
f1();//合法,其它类class3只能访问其它类class1的公有(public)的成员
}
protected:
private:
};

//派生类class4继承基类class1,proteced方式
class class4:protected class1
{
public:
void ff1()
{
f1();//
f2();
f4();
//f3();//非法
}; //
void ff4()
{
//f3();//非法
};
protected:
void ff2();
private:
void ff3();
};

//派生类class5继承基类class1,private方式
class class5:private class1
{
public:
void ff1()
{
f1();//
f2();
f4();
//f3();//非法。
}; //
void ff4()
{
//f3();//非法
};
protected:
void ff2();
private:
void ff3();
};
void main()
{
int a[4][3][4];
class2 obj2,*p;
p=new class2;
obj2.ff1();//合法,一个类的对象只能访问它的类的公有成员。
//obj2.ff2();//非法访问,一个类的对象只能是不能访问它的类的保护(protected)、私有(private)成员的,
//相当于另一个类classOther中的代码,其实就是classOther发出来的。
//实际上就是其它类在访问class1当中的成员
//obj2.ff3();//非法访问类的私有成员

scanf("%d",&a);
printf("%4d",a);

}

 

抱歉!评论已关闭.