21xrx.com
2024-12-22 23:35:30 Sunday
登录
文章检索 我的文章 写文章
"C++中的public、private和protected继承"
2023-07-01 13:08:38 深夜i     --     --
C++ 继承 public private protected

在C++中,继承是一种重要的程序设计概念,通过继承可以构建出更加复杂的程序结构。而在C++中,继承又分为public、private和protected继承三种类型,这三种类型的继承有不同的特点和适用范围。

首先,public继承是一种最常用的继承方式。当一个类使用public继承另一个类时,它将可以访问父类的public成员和方法,但是不能访问父类的private成员和方法。例如,下面的代码实现了public继承:

  class A{

    public:

      void func1()//public方法

        cout << "This is func1" << endl;

    private:

      void func2()//private方法

        cout << "This is func2" << endl;

  };

  class B: public A{

    public:

      void doSomething(){

        func1();//调用父类的public方法

        //func2();//在B类中不能调用父类的private方法

      }

  };

在上面的代码中,子类B继承了父类A的public方法func1, 子类B中的方法doSomething可以直接使用父类A的public方法func1,但是不能访问父类的private方法func2。

其次,private继承是一种典型的组合关系。当一个类使用private继承另一个类时,它将可以访问父类的public和protected成员和方法,但是不能访问父类的private成员和方法。例如,下面的代码实现了private继承:

  class A{

    public:

      void func1()//public方法

        cout << "This is func1" << endl;

    private:

      void func2()//private方法

        cout << "This is func2" << endl;

  };

  class B: private A{

    public:

      void doSomething(){

        func1();//调用父类的public方法

        //func2();//在B类中不能调用父类的private方法

      }

  };

在上面的代码中,子类B继承了父类A的public方法func1和private方法func2, 但是子类B中的方法doSomething只能访问父类A的public方法func1,不能访问父类的private方法func2。

最后,protected继承和private继承类似,它也是一种典型的组合关系。当一个类使用protected继承另一个类时,它将可以访问父类的public和protected成员和方法,但是不能访问父类的private成员和方法。例如,下面的代码实现了protected继承:

  class A{

    public:

      void func1()//public方法

        cout << "This is func1" << endl;

    private:

      void func2()//private方法

        cout << "This is func2" << endl;

  };

  class B: protected A{

    public:

      void doSomething(){

        func1();//调用父类的public方法

        //func2();//在B类中不能调用父类的private方法

      }

  };

在上面的代码中,子类B继承了父类A的public方法func1和private方法func2,但是子类B中的方法doSomething只能访问父类A的public方法func1,不能访问父类的private方法func2。

总之,在C++中,继承分为public、private和protected三种类型,每种类型都有其特点和适用范围。正确理解和使用这些继承方式可以帮助我们更好地设计和实现程序。

  
  

评论区

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