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成员。所以在私有继承时,父类的成员只能由直接派生子类访问,而无法再往下继承。

  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: C++面向对象中的类的继承与派生是指在一个类的基础上,创建一个新的类,新的类可以继承原有类的属性和方法,并且可以添加新的属性和方法,从而实现代码的复用和扩展。 在C++中,使用关键字“class”定义一个类,使用关键字“public”、“private”、“protected”定义类的访问权限。在定义一个派生类时,使用关键字“class”后面加上派生类的名称,再使用冒号“:”后面加上基类的名称,即可实现类的继承。 派生类可以访问基类中的公有成员和保护成员,但不能访问基类中的私有成员。派生类可以重载基类中的成员函数,也可以添加新的成员函数和成员变量。 类的继承与派生是C++面向对象编程中的重要概念,可以帮助程序员更好地组织代码,提高代码的复用性和可维护性。 ### 回答2: 面向对象编程中,类的继承与派生是非常重要的概念。继承是指在一个类的定义中可以基于另一个已有的类来创建一个新的类,新类会自动拥有父类的属性和方法。派生是继承的一种特殊形式,指在已有的类的基础上产生新的子类,新的子类不仅具有父类的属性和方法,还能在此基础上增加新的属性和方法。 在面向对象编程中,继承和派生的主要作用是代码重用,减少了重复代码的编写,并且提高了代码的可维护性和可扩展性。在一个类中,如果有多个方法都具有相同的实现,那么可以将这些方法定义在一个父类中,然后在子类中通过继承来重用这些方法。这样不仅能够提高代码的复用性,还能够降低代码的维护成本。 此外,继承和派生还可以让程序员更好的组织代码,划分出不同的层次,从而更好的管理代码。可以将共性的方法和属性定义在父类中,特有的方法和属性定义在子类中,这样不仅能够提高代码的可读性,还能够更好的维护和扩展代码。 但是,在使用继承和派生时,也需要注意一些问题。首先,如果继承层次过深,会使代码变得复杂,难以维护和扩展。其次,如果子类重写了父类的方法,会导致代码逻辑难以理解。此外,如果父类中的一些方法或属性在子类中没有被使用,那么就会占用不必要的内存。 因此,在使用继承和派生时,需要根据具体的情况来考虑是否使用,不应该过度使用,从而造成代码的混乱和不必要的浪费。同时,也需要注意代码的设计和划分,保持良好的代码结构和规范。 ### 回答3: 在面向对象编程中,类的继承与派生是重要的概念。类的继承是指创建一个新类,该类继承了现有类的属性和方法。派生也是继承的一种形式,是指从一个现有类中创建一个新类,并添加或修改该类的特定属性或方法。 类的继承可以提高代码的可重用性和可维护性。当一个新类继承自一个父类时,它自动继承父类的属性和方法,这意味着开发人员可以重复使用父类的代码。如果需要修改父类的属性或方法时,不需要修改所有继承该类的子类,只需修改基类即可,这有助于提高代码的可维护性。 在类的继承中,子类可以覆盖其父类的方法,这是一种多态性的实现。当调用一个子类对象的方法时,会优先调用子类的方法,如果子类没有实现该方法,那么将会调用父类的方法。 派生则是在继承的基础上创建一个新类,该新类继承父类的特定属性和方法,并添加或修改某些内容。通过这种方式,开发人员可以为不同的应用场景创建定制的类,这可以提高应用程序的灵活性。 在类的继承和派生中,需要注意一些最佳实践。一旦一个类被继承,它的接口就不能轻易地修改。否则所有继承的类都需要相应地进行更改。此外,应避免使用多层次的继承或派生,这会导致代码过于复杂和难以理解。 综上所述,类的继承与派生是面向对象编程中的重要概念。通过继承和派生,可以提高代码的可重用性和可维护性,实现多态性以及创建定制的类。然而,在应用这些概念时,应该遵循良好的最佳实践,以确保代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值