21xrx.com
2024-11-25 03:08:45 Monday
登录
文章检索 我的文章 写文章
C++中的public、private和protected继承解析
2023-07-08 05:24:27 深夜i     --     --
C++ public private protected 继承

在C++中,继承是一种非常重要的概念,它允许我们从一个已有的类中生成一个新的类,并且从父类中继承其属性和方法。C++中的继承方式主要有public、private和protected三种,本文将对这三种继承方式进行详细解析。

在C++中,public、private和protected是关键字,它们用于修饰类成员。public修饰的成员可在类的任何地方被访问,可以被派生类和其他类中的函数访问;private修饰的成员只能在类中被访问,不能被派生类和其他类中的函数访问;protected修饰的成员可以在类中被访问,也可以被派生类的成员函数访问,但不能在类外被访问。

public继承是最常用的继承方式。在public继承中,派生类可以访问基类中的public成员和protected成员,但不能访问基类的private成员。public继承时,派生类的对象可以当做基类对象来使用,基类的public函数在派生类中会自动变成public函数,因此public继承可以实现代码重用和多态性。例如:


class Base {

public:

  int a;

  void func1() cout << "Base Func1" << endl;

protected:

  int b;

  void func2() cout << "Base Func2" << endl;

private:

  int c;

  void func3() cout << "Base Func3" << endl;

};

class Derived : public Base {

public:

  void func4() {

    cout << a << endl; // 合法,可以访问基类中的public成员

    cout << b << endl; // 合法,可以访问基类中的protected成员

    // cout << c << endl; // 非法,不能访问基类中的private成员

    func1(); // 合法,基类的public函数在派生类中自动变成public函数

    func2(); // 合法,基类的protected函数在派生类中自动变成protected函数

    // func3(); // 非法,基类的private函数不能在派生类中访问

  }

};

private继承是指派生类继承父类的所有成员都变成private成员。在private继承中,派生类不能访问基类的public成员和protected成员,只能通过基类的接口来访问它们,也就是说,在派生类中访问基类的public函数或protected函数时,需要将它们再封装一次。private继承是一种紧耦合的继承方式,它主要用于实现has-a关系和控制派生类成员的访问权限。例如:


class Base {

public:

  int a;

  void func1() cout << "Base Func1" << endl;

protected:

  int b;

  void func2() cout << "Base Func2" << endl;

private:

  int c;

  void func3() cout << "Base Func3" << endl;

};

class Derived : private Base {

public:

  void func4() {

    cout << a << endl; // 非法,不能直接访问基类的public成员

    cout << b << endl; // 非法,不能直接访问基类的protected成员

    // cout << c << endl; // 非法,不能访问基类中的private成员

    func1(); // 合法,可以通过基类的接口来访问public函数

    func2(); // 合法,可以通过基类的接口来访问protected函数

    // func3(); // 非法,不能访问基类中的private函数

  }

};

protected继承是指派生类继承父类的所有成员都变成protected成员。在protected继承中,派生类可以访问基类中的protected成员,但不能访问基类的public成员和private成员。protected继承主要用于实现is-a关系,它允许派生类和基类之间存在共性。例如:


class Base {

public:

  int a;

  void func1() cout << "Base Func1" << endl;

protected:

  int b;

  void func2() cout << "Base Func2" << endl;

private:

  int c;

  void func3() cout << "Base Func3" << endl;

};

class Derived : protected Base {

public:

  void func4() {

    cout << a << endl; // 非法,不能直接访问基类的public成员

    cout << b << endl; // 合法,可以访问基类中的protected成员

    // cout << c << endl; // 非法,不能访问基类中的private成员

    func1(); // 合法,可以继承基类的public函数

    func2(); // 合法,可以继承基类的protected函数

    // func3(); // 非法,不能继承基类中的private函数

  }

};

综上所述,C++中的public、private和protected继承各有其特点,我们需要根据实际情况选择合适的方式来继承基类。在使用继承时,我们需要注意派生类对基类成员的访问权限,以及给出合适的访问接口,从而提高程序的可读性和可维护性。

  
  

评论区

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