21xrx.com
2024-12-23 02:01:26 Monday
登录
文章检索 我的文章 写文章
C++中的公有继承和私有继承区别
2023-07-07 01:31:30 深夜i     --     --
C++ 公有继承 私有继承 区别

在C++中,继承是一种重要的面向对象的编程技巧,能够有效地实现代码重用和代码的简化。在继承中,公有继承和私有继承是两种常见的继承方式,它们在继承的访问控制上存在明显的区别。

公有继承是指派生类继承基类中所有的公有成员和保护成员,但派生类无法访问基类中的私有成员。在公有继承中,基类的公有成员可以被派生类的对象和基类的对象访问,且保护成员可以被其派生类的对象访问。例如:


class Base

public:

  int basePublicMember;

private:

  int basePrivateMember;

protected:

  int baseProtectedMember;

;

class Derived : public Base {

public:

  void derivedFunction()

    cout << basePublicMember << endl;

    cout << baseProtectedMember << endl;

    // cout << basePrivateMember << endl; // Error: ‘int Base::basePrivateMember’ is private

  

};

在上面的例子中,派生类Derived继承了基类Base的公有数据成员basePublicMember和保护数据成员baseProtectedMember,并且可以在自身的成员函数中访问这些成员,但是无法访问基类中的私有成员basePrivateMember。

私有继承是指派生类继承基类中所有的公有成员和保护成员,但这些成员都变成了私有成员。在私有继承中,基类的成员都成为了派生类的私有成员,只能在派生类内部使用,不能在派生类外部使用。例如:


class Base

public:

  int basePublicMember;

private:

  int basePrivateMember;

protected:

  int baseProtectedMember;

;

class Derived : private Base {

public:

  void derivedFunction()

    cout << basePublicMember << endl; // Error: ‘int Base::basePublicMember’ is inaccessible

    cout << baseProtectedMember << endl; // Error: ‘int Base::baseProtectedMember’ is inaccessible

    // cout << basePrivateMember << endl; // Error: ‘int Base::basePrivateMember’ is private

  

};

在上面的例子中,派生类Derived继承了基类Base的公有数据成员basePublicMember和保护数据成员baseProtectedMember,但是这些成员都变成了Derived的私有成员,和基类中的私有成员basePrivateMember一样,只能在Derived内部使用。

综上所述,在C++中,公有继承和私有继承是两种不同的继承方式,二者在继承的访问控制、成员的可见性和代码的重用性方面表现出明显的差异。因此,在实际编程中应该根据具体的问题需求来选择适合的继承方式。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复