C++三种继承方式--------私有继承(private)

       私有继承与公有继承有什么区别?如果将上一篇共有继承中源代码中类B继承类A的方式改成私有继承(private),其他部分代码保持不变,编译代码,会出现一下错误信息:

    从编译器指出的错误信息可以看出,父类A中的所有成员在子类对象B中都是不可见的。但是父类中的公有成员在私有继承的子类B中是可见的,可以被访问,但是其属性在子类发生降级。父类A中的public和protected属性的成员在子类中虽然能被访问,但是其属性在子类中被降级为private,所有子类成员是无法访问父类成员的,因为对于子类对象来说,父类的成员全部都是private,都是不可见的。要想正确输出,可用一下代码实现:

#include <iostream>
using namespace std;

class A
{
private:
    int a;
protected:
    int b;
public:
    int c;
    void show()
    {
		cout << "a = " << a << "b = " << b << "c = " << c <<endl;
    }
	
    int set(int a,int b,int c)
    {
	this->a = a;
	this->b = b;
	this->c = c;
    }
    
    int get_a()
    {
        return a;
    }

    int get_b()
    { 
        return b; 
    }
};

class B : private A
{
private:
    int x;
protected:
    int y;
public:
    int z;
	
    void show()
    {
	cout << "a = " << get_a() << "," << "b = " << b << "," << "c = " << c << "," << "x = " << x << "," << "y = " << y << "," << "z = " << z <<endl;
    }
	
    int set(int a,int b,int c,int x,int y,int z)
    {
	    A::set(a,b,c);
	    this->x = x;
	    this->y = y;
	    this->z = z;
    }

	int get_a()
    { 
        return A::get_a();
    }
	
	int get_b()
    { 
        return b;
    }
	
	int get_c()
    { 
        return c;
    }
	
    int get_x()
    { 
        return x;
    }

    int get_y()
    {
        return y;
    } 
};

int main()
{
    B b;
    b.set(10,20,30,40,50,60);
    b.show();
	
    cout << "a = " << b.get_a() <<endl;
    cout << "b = " << b.get_b() <<endl;
    cout << "c = " << b.get_c() <<endl;
    cout << "x = " << b.get_x() <<endl;
    cout << "y = " << b.get_y() <<endl;
    cout << "z = " << b.z <<endl;

    return 0;
}

运行结果如下:

       关于私有继承的总结:父类公有成员和保护成员都作为子类的私有成员,并且不能被这个子类的对象所访问。如果子类再派生出一个孙子类的话,在孙子类是否能访问父类的成员呢?因为父类的成员在子类中只有公有成员和保护成员可以访问,并且属性降级为private,所以孙子类即使是公有继承子类的,也不能访问private成员。所以在私有继承时,父类的成员只能由直接派生子类访问,而无法再往下继承。

猜你喜欢

转载自blog.csdn.net/yue_jijun/article/details/80987994