zoukankan      html  css  js  c++  java
  • C++之共有继承、保护继承、私有继承

    1.封装,public,private作用就是这个目的。

      类外只能访问public成员而不能方位private成员;

      private成员只能被类成员和友元访问;

    2.继承,protected的作用就是这个目的;

      protected成员可以被子类对象访问,但不能被类外的访问;

    3.公有继承:class A : public B

    #include<iostream>
    #include<assert.h>
    using namespace std;
     
    class A{
    public:
      int a;
      A(){
        a1 = 1;
        a2 = 2;
        a3 = 3;
        a = 4;
      }
      void fun(){
        cout << a << endl;    //正确
        cout << a1 << endl;   //正确
        cout << a2 << endl;   //正确
        cout << a3 << endl;   //正确
      }
    public:
      int a1;
    protected:
      int a2;
    private:
      int a3;
    };
    class B : public A{
    public:
      int a;
      B(int i){
        A();
        a = i;
      }
      void fun(){
        cout << a << endl;        //正确,public成员
        cout << a1 << endl;       //正确,基类的public成员,在派生类中仍是public成员。
        cout << a2 << endl;       //正确,基类的protected成员,在派生类中仍是protected可以被派生类访问。
        cout << a3 << endl;       //错误,基类的private成员不能被派生类访问。
      }
    };
    int main(){
      B b(10);
      cout << b.a << endl;   //正确
      cout << b.a1 << endl;   //正确
      cout << b.a2 << endl;   //错误,类外不能访问protected成员
      cout << b.a3 << endl;   //错误,类外不能访问private成员
      system("pause");
      return 0;
    }

    4.保护继承

    #include<iostream>
    #include<assert.h>
    using namespace std;
    class A{
    public:
      int a;
      A(){
        a1 = 1;
        a2 = 2;
        a3 = 3;
        a = 4;
      }
      void fun(){
        cout << a << endl;    //正确
        cout << a1 << endl;   //正确
        cout << a2 << endl;   //正确
        cout << a3 << endl;   //正确
      }
    public:
      int a1;
    protected:
      int a2;
    private:
      int a3;
    };
    class B : protected A{
    public:
      int a;
      B(int i){
        A();
        a = i;
      }
      void fun(){
        cout << a << endl;       //正确,public成员。
        cout << a1 << endl;       //正确,基类的public成员,在派生类中变成了protected,可以被派生类访问。
        cout << a2 << endl;       //正确,基类的protected成员,在派生类中还是protected,可以被派生类访问。
        cout << a3 << endl;       //错误,基类的private成员不能被派生类访问。
      }
    };
    int main(){
      B b(10);
      cout << b.a << endl;       //正确。public成员
      cout << b.a1 << endl;      //错误,protected成员不能在类外访问。
      cout << b.a2 << endl;      //错误,protected成员不能在类外访问。
      cout << b.a3 << endl;      //错误,private成员不能在类外访问。
      system("pause");
      return 0;
    }

    5.私有继承

    #include<iostream>
    #include<assert.h>
    using namespace std;
    class A{
    public:
      int a;
      A(){
        a1 = 1;
        a2 = 2;
        a3 = 3;
        a = 4;
      }
      void fun(){
        cout << a << endl;    //正确
        cout << a1 << endl;   //正确
        cout << a2 << endl;   //正确
        cout << a3 << endl;   //正确
      }
    public:
      int a1;
    protected:
      int a2;
    private:
      int a3;
    };
    class B : private A{
    public:
      int a;
      B(int i)
    { A(); a
    = i; } void fun(){ cout << a << endl; //正确,public成员。 cout << a1 << endl; //正确,基类public成员,在派生类中变成了private,可以被派生类访问。 cout << a2 << endl; //正确,基类的protected成员,在派生类中变成了private,可以被派生类访问。 cout << a3 << endl; //错误,基类的private成员不能被派生类访问。 } }; int main(){ B b(10); cout << b.a << endl; //正确。public成员 cout << b.a1 << endl; //错误,private成员不能在类外访问。 cout << b.a2 << endl; //错误, private成员不能在类外访问。 cout << b.a3 << endl; //错误,private成员不能在类外访问。 system("pause"); return 0; }

    总结:

      protected,是指子类可以访问类成员,但是不能被外部访问;

  • 相关阅读:
    定义和使用EL函数
    在Java Web程序中使用Hibernate
    JDBC在Java Web中的应用——分页查询
    JDBC调用存储过程
    使用navicat工具创建MySQL存储过程
    JDBC操作数据库的批处理
    JDBC操作数据库
    Servlet监听器统计在线人数
    Servlet字符编码过滤器
    Servlet过滤器创建与配置
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/9648563.html
Copyright © 2011-2022 走看看